Promiseで構成される処理のフローを最適化しようとするとよくわからなくなってくる。awaitで依存する処理同士を繋げ、それぞれをPromise.all()で並列に実行する、というのが基本のアプローチのようだ。しかし当然Promise.all()の中で更にPromise.all()することになり、それがどんどん入れ子になっていく。すると見通しが悪くなってくる。

1年くらい前にasync/awaitがあってもやはりPromiseも必要という記事を読んだ覚えがあったので、改めて読み直していた。ここでは頑張ってオレオレ便利関数を作ってやろう、というような結論だ。これならさすがにPromise.all()を入れ子にするだけの方が良さそうだ。

しかしながらawaitPromise.all()を混ぜると、Linterではどうにもならなそうなミスが頻発してしまう。awaitの書き忘れや書きすぎ、Promise.all()returnし忘れ、などだ。間違えてPromise.all()の中でarr.filter(foo).map(bar)などと書いてしまうこともある。こうなると依存関係を簡単な図で書くとawaitPromise.all()でスケルトンを生成してくれるツールが欲しくなる。

とにかく習作を書きまくるしかない。