💰

Promiseを使った並列処理

2024/09/05に公開

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