Promise.allSettled()
Promise.allSettled() は静的メソッドで、入力としてプロミスの反復可能オブジェクトを受け取り、単一の Promise を返します。この返されたプロミスは、入力のすべてのプロミスが決定したとき(空の反復可能オブジェクトが渡された場合を含む)に履行され、各プロミスの結果を記述するオブジェクトの配列が返されます。
試してみましょう
構文
js
Promise.allSettled(iterable)
引数
iterable-
プロミスの反復可能オブジェクト(
Arrayなど)です。
返値
次のような Promise です。
- 反復可能オブジェクトが空であった場合は、履行済みになります。
- 渡された反復可能オブジェクトのすべてのプロミスが(履行または拒否に)決定したとき、非同期に履行されます。履行されたプロミスの値はオブジェクトの配列で、それぞれが反復可能なオブジェクトの中の一つのプロミスの結果を記述しています。それぞれの成果オブジェクトには、以下のようなプロパティがあります。
status-
文字列で、
"fulfilled"(履行)または"rejected"(拒否)をとり、そのプロミスの最終的な状態を示します。 value-
statusが"fulfilled"の場合のみ存在します。プロミスが履行された値です。 reason-
statusが"rejected"の場合のみ存在します。プロミスが拒否された理由です。
渡された反復可能オブジェクトが空でなく、待機中のプロミスを含んでいない場合、返されたプロミスは(同期ではなく)非同期に履行されます。
解説
Promise.allSettled() メソッドはプロミスの並列処理 メソッドの 1 つです。Promise.allSettled() は、通常、正常に完了するために互いに依存しない複数の非同期タスクがある場合、または各プロミスの結果を常に知りたい場合に使用されます。
それに対して、 Promise.all() が返すプロミスは、タスクが他にも依存している場合や、どれかが拒否されたらすぐに拒否したい場合により適しているかもしれません。
例
Promise.allSettled の使用
js
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