Promiseで複数の処理を扱うときには次のような流れに乗るとスムーズに書けます。
-
各処理をpromise化する関数等を用意する
-
元データを配列で用意して、promise化処理を通してpromiseオブジェクトの配列を作成する
-
promiseの配列に対して
Promise.all
やPromise.race
を使いまとめて扱う -
promiseの配列に対するresolveの結果も配列となる
このような流れを作ることで、全てのデータを配列として扱うことができるようにすることで、 Promiseのコントロールフローがキレイに書ける可能性が高くなります。
元データ(配列) -> promiseオブジェクトの配列 -> resolveで渡された値の配列
配列には map
や forEach
等の高階関数が用意されているため、
配列の中身(実データやpromiseオブジェクト)に触る処理は関数として用意することで、
高階関数の引数に処理を渡すだけとなり表面的な分岐等の処理を減らすことができます。
高階関数:: 関数を引数として渡す関数の事
実際に幾つか例を見てみましょう。