複数のPromiseをまとめて処理をしたくてPromise.allを使っていたが、allは複数のPromiseのうち一つでも Reject すると全体が Reject してしまう
どれかが失敗しようが全て実行して成功と失敗の配列で結果が欲しい場合Promise.allSettled()を使うとよいことがわかったので調べてみる
allSettled
以下の記事が参考になった
allSettledは、allとは違い、個々が Resolve/Reject どちらになっても、最後までとにかく全て実行する。 実行した結果を配列として Resolve するため、基本的にallSettled自体はRejectしない。
Promise.allSettled() - JavaScript | MDN
これを使えばやりたいことはできそう
他のAPI
調べると複数のPromiseを処理する他のAPIもあったのでまとめておく
- Promise.all
全てがresolveしたら結果はresolveだが、それ以外はrejectになる - Promise.allSettled
resolverejectにかかわらず全ての結果を配列で返す、rejectはない - Promise.any
resolveのものがみつかったら直ちにresolveを返す、全てがrejectになったらrejectを返す - Promise.race
どれか一つでも完了したら直ちにその結果を返す
用語もまとめておく
- Fulfilled:Promise が Resolve した状態
- Reject:Promise が Rejected した状態
- Settled:処理が終わった状態