← 返回首页
Symbol.asyncIterator - JavaScript | MDN

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Symbol.asyncIterator

Baseline 広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2020年1月以降、すべてのブラウザーで利用可能です。

Symbol.asyncIterator は静的データプロパティで、ウェルノウンシンボルの Symbol.asyncIterator を表します。非同期反復可能プロトコルは、オブジェクトの非同期反復子を返すメソッドをこのシンボルで探します。オブジェクトが非同期反復可能であるためには、[Symbol.asyncIterator] キーを持つ必要があります。

目次

試してみましょう

const delayedResponses = { delays: [500, 1300, 3500], wait(delay) { return new Promise((resolve) => { setTimeout(resolve, delay); }); }, async *[Symbol.asyncIterator]() { for (const delay of this.delays) { await this.wait(delay); yield `${delay} ミリ秒の遅延レスポンス`; } }, }; (async () => { for await (const response of delayedResponses) { console.log(response); } })(); // 予想される結果: "500 ミリ秒の遅延レスポンス" // 予想される結果: "1300 ミリ秒の遅延レスポンス" // 予想される結果: "3500 ミリ秒の遅延レスポンス"

ウェルノウンシンボル Symbol.asyncIterator です。

Symbol.asyncIterator のプロパティ属性
書込可能不可
列挙可能不可
設定可能不可

ユーザー定義の非同期反復可能項目

オブジェクトに [Symbol.asyncIterator]() プロパティを設定することで、独自の非同期イテレーターを定義することができます。

js
const myAsyncIterable = { async *[Symbol.asyncIterator]() { yield "hello"; yield "async"; yield "iteration!"; }, }; (async () => { for await (const x of myAsyncIterable) { console.log(x); } })(); // 期待される出力: // "hello" // "async" // "iteration!"

API を作成するとき、非同期反復可能項目はデータのストリームやリストのような、反復可能なものを表すために設計されたものであり、ほとんどの状況でコールバックやイベントを完全に置き換えるものではないことに注意してください。

組み込みの非同期反復可能オブジェクト

コア JavaScript 言語に非同期反復可能オブジェクトはありません。一部の Web API、例えば ReadableStream は既定で Symbol.asyncIterator メソッドが設定されています。

仕様書

仕様書
ECMAScript® 2027 Language Specification
# sec-symbol.asynciterator

ブラウザーの互換性

ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。

関連情報