Promiseで構成される処理のフローを最適化しようとするとよくわからなくなってくる。await
で依存する処理同士を繋げ、それぞれをPromise.all()
で並列に実行する、というのが基本のアプローチのようだ。しかし当然Promise.all()
の中で更にPromise.all()
することになり、それがどんどん入れ子になっていく。すると見通しが悪くなってくる。
1年くらい前にasync/awaitがあってもやはりPromiseも必要という記事を読んだ覚えがあったので、改めて読み直していた。ここでは頑張ってオレオレ便利関数を作ってやろう、というような結論だ。これならさすがにPromise.all()
を入れ子にするだけの方が良さそうだ。
しかしながらawait
とPromise.all()
を混ぜると、Linterではどうにもならなそうなミスが頻発してしまう。await
の書き忘れや書きすぎ、Promise.all()
のreturn
し忘れ、などだ。間違えてPromise.all()
の中でarr.filter(foo).map(bar)
などと書いてしまうこともある。こうなると依存関係を簡単な図で書くとawait
とPromise.all()
でスケルトンを生成してくれるツールが欲しくなる。
とにかく習作を書きまくるしかない。