TypeScript の Async Generator について
TypeScript
知識
この機能は以下二つの概念を組み合わせたもの
- Generator(ジェネレーター)- イテレーターを生成する関数
- Async(非同期)- Promiseベースの非同期処理
構文
ts
async *functionName() {
// ^ アスタリスク(*)はジェネレーター関数を示す
// async キーワードは非同期関数であることを示す
}例
ts
async function* asyncNumberGenerator() {
yield await Promise.resolve(1);
yield await Promise.resolve(2);
yield await Promise.resolve(3);
}
// 非同期ジェネレーターを使用したイテレーション
async function run() {
for await (const num of asyncNumberGenerator()) {
console.log(num); // 1, 2, 3 の順で出力
}
}良いところ
- メモリ効率が良い(全データを同時に保持しない)
- 必要なときに必要な分だけデータを生成/取得
- 無限のデータストリームも扱える
- バッチ処理やストリーミング処理に適している