(async) 非同期関数と非同期ジェネレータまとめ

Published: 2022/6/30


async 関数や generator たちが、 stack 上でどのように処理されるかの備忘録

非同期関数ジェネレータ非同期ジェネレータ
関数呼び出し普通に呼び出されるジェネレータ生成ジェネレータ生成
await (外側)初回で Promise が返るN/Anext() 以降の初回で Promise が返る
await (内側)await 対象の Promise に .then して再開N/Aawait 対象の 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

関連記事