takashiskiのブログ

覚書の殴り書き

JavaScriptの非同期処理・Promiseのとりあつかい等のおすすめ資料

ざっくり

とりあえず一通り読んでおけ枠

Promiseとasync/awaitをつなぐ枠

読んでおくと、「async functionはなんでPromiseを返すのか」とかわかるかもしれない。

ざっくり歴史・経緯(私見)

  • 処理とUIでスレッドが分かれていないので、外部に依頼を投げて外部からの結果待ちをするときにUIのイベントをブロックしないために非同期処理を使う必要があった
  • 特に工夫のない非同期処理では後続処理やエラー処理を行うために引数に関数を渡す方式(コールバック方式)が使われていた
  • コールバック関数には人類には難しすぎるなど色々課題があったのでPromiseが導入された。また同タイミングでgeneratorも導入された
  • Promiseも人類にはまだまだ難しい書き方であったので、generatorと組み合わせて同期的な書き方に近い表現を実現する方法が提案されていた(coなど、通称:コルーチン、イディオム)
  • コルーチン、イディオムが正式にasync/awaitとして採用された

蛇足

私の現状ざっくり理解

  • Promiseは非同期処理の実行状況やコールバック関数を見通しよく書くためのもの
  • Promise自体は非同期処理じゃない
  • 非同期処理は「○○さん、これやっといて!自分はほかにやることあるから、あとよろしく!」とだいたい同じ
  • 非同期処理のあとに後続処理をやるためにコールバック関数を設定することは「○○さん、これやっといて!終わったら声かけて!」とだいたい同じ
  • 非同期処理におけるcallback hellは「○○さん、これやっといて!終わったら出来上がったものをこの形式にまとめて!まとめなおしたものを××さんに渡して△△してもらって!△△してもらったら声かけて!」とだいたい同じ