【Node.js24.x】Symbol::asyncIterator定数の使い方
asyncIterator定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
asyncIterator定数は、JavaScriptおよびNode.jsにおいて、オブジェクトが非同期イテレータブルプロトコルを実装するために使用される特別なシンボルを表す定数です。このプロトコルは、for-await-ofループを使って、非同期的に値のシーケンスを反復処理できるオブジェクトを定義するためのものです。
オブジェクトが非同期イテレータブルとして振る舞うためには、[Symbol.asyncIterator]というキー名を持つメソッドを実装する必要があります。このメソッドは、next()メソッドを持つ非同期イテレータオブジェクトを返さなければなりません。非同期イテレータのnext()メソッドは、Promiseを返します。このPromiseは、{ value: T, done: boolean }の形式を持つオブジェクトに解決されます。valueは現在の反復処理で得られた値を、doneは反復処理が完了したかどうかを示します。
これにより、ファイルシステムからのデータ読み込みやネットワークからのデータストリームなど、非同期的に提供されるデータソースを、同期的なfor-ofループに似た簡潔な構文であるfor-await-ofループで効率的かつ読みやすく処理することが可能になります。Symbol.asyncIteratorは、モダンな非同期プログラミングにおいて、カスタムの非同期データソースを標準的な方法で統合するための重要な基盤を提供します。
構文(syntax)
1class MyAsyncIterable { 2 constructor(limit) { 3 this.limit = limit; 4 } 5 6 async *[Symbol.asyncIterator]() { 7 for (let i = 0; i < this.limit; i++) { 8 await new Promise(resolve => setTimeout(resolve, 10)); 9 yield i; 10 } 11 } 12} 13 14(async () => { 15 const myAsyncIterable = new MyAsyncIterable(3); 16 for await (const value of myAsyncIterable) { 17 console.log(value); 18 } 19})();
引数(parameters)
引数なし
引数はありません
戻り値(return)
symbol
Symbol.asyncIterator は、非同期イテレータを識別するための組み込みシンボルです。このシンボルは、オブジェクトが非同期シーケンスを反復処理できることを示すために使用されます。