异步迭代器概念
在 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