AsyncIterator

一个AsyncIterator对象是一个符合异步迭代器协议的对象,它提供了一个next()方法,该方法返回一个解析为迭代器结果对象的 Promise。AsyncIterator.prototype对象是一个隐藏的全局对象,所有内置的异步迭代器都继承自它。它提供了一个[Symbol.asyncIterator]()方法,该方法返回异步迭代器对象本身,使异步迭代器也成为异步可迭代的

请注意,AsyncIterator不是一个全局对象,尽管将来随着异步迭代器助手提案的发布,它将成为全局对象。所有内置异步迭代器共享的AsyncIterator.prototype对象可以通过以下代码获取

js
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循环中使用它们

js
const asyncIterator = (async function* () {
  yield 1;
  yield 2;
  yield 3;
})();
(async () => {
  for await (const value of asyncIterator) {
    console.log(value);
  }
})();
// Logs: 1, 2, 3

规范

规范
ECMAScript 语言规范
# sec-asynciteratorprototype

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅