AsyncIterator
Baseline Widely 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[@@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 Language Specification # sec-asynciteratorprototype |
ブラウザーの互換性
BCD tables only load in the browser