JavaScript AsyncIterator

原创
admin 4个月前 (08-19) 阅读数 19 #JavaScript

AsyncIterator

AsyncIterator 是符合异步迭代器协议的对象,它提供了 next() 方法,该方法返回一个 promise,该 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® 2026 Language Specification
# sec-asynciteratorprototype

参见

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。

作者文章
热门
最新文章
标签列表