AsyncIterator

Baseline 广泛可用 *

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流浏览器均已支持。

* 此特性的某些部分可能存在不同级别的支持。

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

请注意,AsyncIterator **不是**一个全局对象,尽管它未来会随着 async iterator helpers 提案 而成为全局对象。可以通过以下代码获取所有内置异步迭代器共享的 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.asyncDispose]()

调用并等待 thisreturn() 方法(如果存在)。这实现了异步可处置协议,并允许在使用 await using 时对其进行处置。

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® 2026 语言规范
# sec-asynciteratorprototype

浏览器兼容性

另见