解析 ES10 中的异步迭代器 (AsyncIterator) 及使用方式

异步迭代器概念

在 ES10 中,异步迭代器 (AsyncIterator) 是实现了一个[Symbol.asyncIterator]的对象,它可以在迭代过程中返回 Promise 对象,使得迭代过程变为异步的。

实现 AsyncIterator

通过定义一个具有[Symbol.asyncIterator]方法的对象,我们就可以实现一个 AsyncIterator。

----- -------------------- - -
  ----- ------------------------- -
    ----- --- ----------------- -- ------------- -- ----------- -----
    ----- --- ----------------- -- ------------- -- ----------- -----
    ----- --- ----------------- -- ------------- -- ----------- -----
  --
-

在上面的代码中,我们定义了一个包含三个 Promise 的 AsyncIterableExample 对象,通过 yield 返回每个 Promise 的结果。

使用 AsyncIterator

for await...of

可以通过 for await...of 来消费一个 AsyncIterator。

------ -------- -- -
  --- ----- ------ ----- -- --------------------- -
    ------------------
  -
----

在代码中,我们通过 for await...of 来消费 AsyncIterableExample 对象,并通过 console.log 输出结果。

Promise.all 加上 map

我们也可以将 AsyncIterator 对象通过 Promise.all 加上 map 方法来消费。

------ ---------- -
  ----------------- ------------------ ------------------------------------------------------- - -- ----- -----
-----

在这个例子中,我们将 AsyncIterator 对象通过(await AsyncIterableExampleSymbol.asyncIterator)获取,然后进行map操作,每个 Promise 对象再通过 async/await来获取结果,再通过 Promise.all 来返回最终结果。

结论

通过 AsyncIterator,我们可以通过 几种不同的方法来消费异步迭代对象,使得其更加灵活可用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6711d68dad1e889fe2012159