Promise.allSettled()
Promise.allSettled()
メソッドは、与えられたすべてのプロミスが履行されたか拒否された後に、それぞれのプロミスの結果を記述した配列オブジェクトで解決されるプロミスを返します。
一般的には、複数の非同期タスクがあり、お互いに依存せずに正常に完了する場合や、各プロミスの結果を常に知りたい場合に使用されます。
これに対して、 Promise.all()
で返されるプロミスは、タスクがお互いに依存している場合や、タスクのいずれかが拒否されたときにすぐに拒否したい場合にはより適切かもしれません。
試してみましょう
構文
Promise.allSettled(iterable);
引数
返値
待ち状態の Promise
で、指定されたプロミスの集合に含まれるすべてのプロミスが、正常に履行されるか拒否されるかのどちらかで完了すると、非同期に解決されます。その際、返されたプロミスのハンドラーには、元のプロミスの集合に含まれるの各プロミスの結果を含む配列が入力として渡されます。
ただし、空の反復可能オブジェクトが引数として渡された場合に限り、 Promise.allSettled()
は空の配列として解決済みの Promise
オブジェクトを返します。
出力されるそれぞれのオブジェクトには、 status
の文字列が存在します。 status が fulfilled
(履行) であれば、 value
が存在します。 status が rejected
(拒否) であれば、 reason
が存在します。 value (または reason) はそれぞれのプロミスがどの値で履行 (または拒否) されたかを反映します。
例
Promise.allSettled の使用
Promise.prototype.then()
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}
// ]
await
const values = await Promise.allSettled([
Promise.resolve(33),
new Promise(resolve => setTimeout(() => resolve(66), 0)),
99,
Promise.reject(new Error('an error'))
])
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
関連情報
Promise.allSettled
のポリフィルがcore-js
で利用できます- Promises
- プロミスの使用
- プロミスを使った行儀のよい非同期のプログラミング (en-US)
Promise
Promise.all()