(async) 非同期関数と非同期ジェネレータまとめ
Published: 2022/6/30
async 関数や generator たちが、 stack 上でどのように処理されるかの備忘録
非同期関数 | ジェネレータ | 非同期ジェネレータ | |
---|---|---|---|
関数呼び出し | 普通に呼び出される | ジェネレータ生成 | ジェネレータ生成 |
await (外側) | 初回で Promise が返る | N/A | next() 以降の初回で Promise が返る |
await (内側) | await 対象の Promise に .then して再開 | N/A | await 対象の Promise に .then して再開 |
yield (外側) | N/A | .next() の戻り値 | 対象値が外の Promise の結果として resolve |
yield (内側) | N/A | .next() の引数が返る | .next() の引数が返る |
return | 対象値が外の Promise の結果として resolve | .next() の戻り値 + done | 対象値が外の Promise の結果として resolve + done |
まとめると、非同期ジェネレータは、 yield で区切られたコード区分のそれぞれが async 関数、みたいな振舞いをしている。
非同期関数の詳細は Promise, generator, async/await はどのように実行されるかについての記事を参照。
Tags: javascript
関連記事
Promise 同時実行制御のための async-pool
2023/9/30
Promise を扱っている時に microQueue が積まれるタイミング
2022/10/10
Node.js でコマンドの実行結果を1行ずつ取得する方法
2022/10/9