DOM

Promise.allSettled()メソッド

 編集:2022.07.29 by T.A.

与えられたすべてのプロミスが履行されたか拒否された後に、それぞれのプロミスの結果を記述した配列オブジェクトで解決されるプロミスを返します。→

一般的には、複数の非同期タスクがあり、お互いに依存せずに正常に完了する場合や、各プロミスの結果を常に知りたい場合に使用されます。

これに対して、Promise.all() で返されるプロミスは、タスクがお互いに依存している場合や、タスクのいずれかが拒否されたときにすぐに拒否したい場合にはより適切かもしれません。

Promise.allSettled(iterable);
iterable Array などの反復可能オブジェクトで、それぞれの要素が Promise であるものです。
戻り値

待ち状態の Promise で、指定されたプロミスの集合に含まれるすべてのプロミスが、正常に履行されるか拒否されるかのどちらかで完了すると、非同期に解決されます。その際、返されたプロミスのハンドラーには、元のプロミスの集合に含まれるの各プロミスの結果を含む配列が入力として渡されます。

ただし、空の反復可能オブジェクトが引数として渡された場合に限り、Promise.allSettled() は空の配列として解決済みの Promise オブジェクトを返します。

出力されるそれぞれのオブジェクトには、status の文字列が存在します。status が fulfilled(履行)であれば、value が存在します。status が rejected(拒否)であれば、reason が存在します。 value(または reason)はそれぞれのプロミスがどの値で履行(または拒否)されたかを反映します。

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'))
])
D=values;
//=[
//   {status: "fulfilled", value: 33},
//   {status: "fulfilled", value: 66},
//   {status: "fulfilled", value: 99},
//   {status: "rejected",  reason: Error: an error}
// ]

¶省く


テスト