AsyncIterator
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
AsyncIterator
オブジェクトは非同期イテレータープロトコル に準拠したオブジェクトで、next()
メソッドを提供することでイテレーターの結果オブジェクトに履行されるプロミスを返します。AsyncIterator.prototype
オブジェクトは、すべての組み込み非同期イテレーターが継承する非表示のグローバルオブジェクトです。これは、非同期イテレーターオブジェクト自身を返す@@asyncIterator
メソッドを提供し、非同期イテレーターを非同期反復可能にもします。
なお、AsyncIterator
はグローバルオブジェクトではありませんが、将来的にはasync iterator helpers proposal でグローバルオブジェクトになる予定です。すべての組み込み非同期イテレーターで共有されるAsyncIterator.prototype
オブジェクトは以下のコードで取得できます。
const AsyncIteratorPrototype = Object.getPrototypeOf( Object.getPrototypeOf(Object.getPrototypeOf((async function* () {})())),);
解説
現在、 JavaScript の組み込み非同期イテレーターは、非同期ジェネレーター関数が返すAsyncGenerator
オブジェクトだけです。ウェブ API には他にもReadableStream
のような組み込みの非同期イテレーターがあります。
これらの非同期イテレーターはそれぞれ個別のプロトタイプオブジェクトを持っており、特定の非同期イテレーターが使用するnext()
メソッドを定義しています。これらのプロトタイプオブジェクトはすべてAsyncIterator.prototype
を継承しています。これは非同期イテレータオブジェクト自身を返す@@asyncIterator
メソッドを提供し、非同期イテレーターを非同期反復可能にもします。
メモ:AsyncIterator.prototype
は@@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 |