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

瀏覽器相容性

另見