AsyncIterator
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
AsyncIterator
对象是符合异步迭代器协议的对象,其提供了 next()
方法用以返回一个兑现为迭代器结果对象的 promise。AsyncIterator.prototype
对象是一个隐藏的全局对象,所有内置的异步迭代器都继承自它。其提供了 [Symbol.asyncIterator]()
方法,该方法返回异步迭代器对象本身,使异步迭代器也异步可迭代。
注意,AsyncIterator
不是全局对象,尽管将来会出现异步迭代器辅助方法提案。所有内置异步迭代器共享的 AsyncIterator.prototype
对象可以通过以下代码获得:
const AsyncIteratorPrototype = Object.getPrototypeOf(
Object.getPrototypeOf(Object.getPrototypeOf((async function* () {})())),
);
描述
目前,唯一内置的 JavaScript 异步迭代器是由异步生成器函数返回的 AsyncGenerator
对象。还有一些其他的内置异步迭代器存在于 web API 中,例如 ReadableStream
的异步迭代器。
每个异步迭代器都有一个不同的原型对象,它定义了特定异步迭代器使用的 next()
方法。所有这些原型对象都继承自 AsyncIterator.prototype
,它提供了一个 [Symbol.asyncIterator]()
方法,该方法返回异步迭代器对象本身,使异步迭代器也可异步迭代。
备注: AsyncIterator.prototype
并未实现 [Symbol.iterator]()
,因此默认情况下,异步迭代器不是同步可迭代对象。
实例方法
AsyncIterator.prototype[Symbol.asyncIterator]()
-
返回异步迭代器对象本身。这使异步迭代器对象也可以异步迭代。
示例
使用异步迭代器作为异步可迭代对象
所有内置异步迭代器都可以异步迭代,因此你可以在 for await...of
循环中使用它们:
const asyncIterator = (async function* () {
yield 1;
yield 2;
yield 3;
})();
(async () => {
for await (const value of asyncIterator) {
console.log(value);
}
})();
// 输出:1,2,3
规范
Specification |
---|
ECMAScript Language Specification # sec-asynciteratorprototype |
浏览器兼容性
BCD tables only load in the browser