💰
[JavaScript]Promiseを使った並列処理
はじめに
ここではJavaScriptにおける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