Symbol.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.

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 `Delayed response for ${delay} milliseconds`;
    }
  },
};

(async () => {
  for await (const response of delayedResponses) {
    console.log(response);
  }
})();

// Expected output: "Delayed response for 500 milliseconds"
// Expected output: "Delayed response for 1300 milliseconds"
// Expected output: "Delayed response for 3500 milliseconds"

ウェルノウンシンボル 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 メソッドが設定されています。

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-symbol.asynciterator

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
asyncIterator

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報