AsyncIterator
Baseline 廣泛可用 *
AsyncIterator 物件是一個物件,它透過提供一個返回迭代器結果物件的 Promise 的 next() 方法,來遵循 非同步迭代器協議。AsyncIterator.prototype 物件是一個隱藏的全域性物件,所有內建的非同步迭代器都繼承自它。它提供了一個 [Symbol.asyncIterator]() 方法,該方法返回非同步迭代器物件本身,使得非同步迭代器也成為 非同步可迭代物件。
請注意,AsyncIterator **不是**一個全域性物件,儘管它未來會隨著 async iterator helpers 提案 而成為全域性物件。可以透過以下程式碼獲取所有內建非同步迭代器共享的 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.asyncDispose]()-
呼叫並等待
this的return()方法(如果存在)。這實現了非同步可處置協議,並允許在使用await using時對其進行處置。 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);
}
})();
// Logs: 1, 2, 3
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-asynciteratorprototype |
瀏覽器相容性
載入中…