Promise.allSettled()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2020.
Promise.allSettled()
は静的メソッドで、入力としてプロミスの反復可能オブジェクトを受け取り、単一の Promise
を返します。この返されたプロミスは、入力のすべてのプロミスが決定したとき(空の反復可能オブジェクトが渡された場合を含む)に履行され、各プロミスの結果を記述するオブジェクトの配列が返されます。
試してみましょう
構文
Promise.allSettled(iterable)
引数
iterable
-
プロミスの反復可能オブジェクト(
Array
など)です。
返値
次のような Promise
です。
-
反復可能オブジェクトが空であった場合は、履行済みになります。
-
渡された反復可能オブジェクトのすべてのプロミスが(履行または拒否に)決定したとき、非同期に履行されます。履行されたプロミスの値はオブジェクトの配列で、それぞれが反復可能なオブジェクトの中の一つのプロミスの結果を記述しています。それぞれの成果オブジェクトには、以下のようなプロパティがあります。
渡された反復可能オブジェクトが空でなく、待機中のプロミスを含んでいない場合、返されたプロミスは(同期ではなく)非同期に履行されます。
解説
Promise.allSettled()
メソッドはプロミスの並行処理 メソッドの 1 つです。Promise.allSettled()
は、通常、正常に完了するために互いに依存しない複数の非同期タスクがある場合、または各プロミスの結果を常に知りたい場合に使用されます。
メモ: 日本語の技術文書では、このメソッドが複数のプロミスを並列に処理すると説明されることがありますが、実際には複数のスレッドでプロミスが処理されるわけではないことに注意してください。詳細はプロミスの並行処理を参照してください。
それに対して、 Promise.all()
が返すプロミスは、タスクが他にも依存している場合や、どれかが拒否されたらすぐに拒否したい場合により適しているかもしれません。
例
Promise.allSettled の使用
Promise.allSettled([
Promise.resolve(33),
new Promise((resolve) => setTimeout(() => resolve(66), 0)),
99,
Promise.reject(new Error("an error")),
]).then((values) => console.log(values));
// [
// { status: 'fulfilled', value: 33 },
// { status: 'fulfilled', value: 66 },
// { status: 'fulfilled', value: 99 },
// { status: 'rejected', reason: Error: an error }
// ]
仕様書
Specification |
---|
ECMAScript Language Specification # sec-promise.allsettled |
ブラウザーの互換性
BCD tables only load in the browser