💰
Promiseを使った並列処理
Promiseのステータス一覧
pending : resolve, rejectが呼び出される前の状態
fulfilled : resolveが呼び出された状態
rejected : rejectが呼び出された状態
Promise.all
すべての非同期処理を並列に実行し、すべての完了を待ってから次の処理を行う。
与えられたPromiseインスタンスがfulfilledになった際に続くthenメソッドの処理に移る。その際にthenのコールバック関数の引数に渡されるのは各resolveに設定した実引数が格納された配列。
一つでもrejectedになればcatchメソッドに移る。
Promise.all(iterablePromisees)
.then((resolveArray) =>{...})
.catch((e) => {...});
Promise.race
最初にfulfilled、rejectedになったPromiseの結果を取得し続くthenメソッドかcatchメソッドの処理に移る。
Promise.race(iterablePromisees)
.then((firstResolvedValue) =>{...})
.catch((e) => {...});
Promise.any
最初にfulfilledになったPromiseの結果を取得し、続くthenメソッドの処理に移る。
すべてrejectedになった場合はcatchメソッドの処理に移る。
Promise.any(iterablePromisees)
.then((ResolvedValue) =>{...})
.catch((e) => {...});
Promise.allSetled
すべてのPromiseがfulfilledかrejectedになるまで待ち、それぞれのプロミスの最終的な結果を含むオブジェクトを返す。
catchメソッドは使わない。
thenメソッドのコールバック関数にそれぞれのPromiseのインスタンス状態(status)と値(valueかreason)が対で格納された配列が渡される。
以下はarryに格納される配列の例。
[
{ status : "fulfilled", value: "resolveの値" },
{ status : "rejected", reason: "rejectの値" }
]
Promise.allSetled(iterablePromisees)
.then((arry) =>{...})
Discussion