【JavaScript ECMAScript】Symbol::Symbol.asyncIterator静的データプロパティの使い方
Symbol.asyncIterator静的データプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
Symbol.asyncIteratorプロパティは、オブジェクトが非同期イテレーションプロトコルに準拠するために使用されるWell-known Symbolの一つを保持するプロパティです。これは、特定のオブジェクトが非同期的に反復処理される際の動作を定義するために利用される特別なキーです。
具体的には、オブジェクトの[Symbol.asyncIterator]という名前のメソッドを定義することで、そのオブジェクトをfor await...ofループで反復可能にすることができます。このメソッドは、非同期イテレータオブジェクトを返す必要があります。非同期イテレータオブジェクトとは、next()メソッドを持ち、そのnext()メソッドが{ value: T, done: boolean }の形式を持つPromiseを返すものです。ここでvalueはイテレーションで得られる値、doneはイテレーションが完了したかどうかを示します。
これにより、データベースからのデータ取得やネットワークリクエストの結果など、非同期的に生成される一連のデータを、for await...ofループを用いて標準的かつ一貫した方法で順次処理できるようになります。例えば、一連のPromiseを順に解決しながら値を生成するストリーム処理など、時間のかかる非同期操作からデータを効率的に取得・処理する際に活用されます。非同期処理を含む複雑なデータフローを、同期処理のように簡潔なfor await...of構文で扱えるようになるため、非同期コードの可読性と保守性の向上に貢献します。
構文(syntax)
1const myAsyncIterable = { 2 async *[Symbol.asyncIterator]() { 3 // 非同期処理を伴うイテレーションのロジックをここに実装します 4 yield 'データ1'; 5 yield 'データ2'; 6 } 7};
引数(parameters)
引数なし
引数はありません
戻り値(return)
symbol
Symbol.asyncIterator は、オブジェクトが非同期イテレータプロトコルを実装していることを示すための組み込みシンボルです。このシンボルをキーとしてアクセスできる値は、そのオブジェクトの非同期イテレータを返します。