複数の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
resolve
reject
にかかわらず全ての結果を配列で返す、reject
はない - Promise.any
resolve
のものがみつかったら直ちにresolve
を返す、全てがreject
になったらreject
を返す - Promise.race
どれか一つでも完了したら直ちにその結果を返す
用語もまとめておく
- Fulfilled:Promise が Resolve した状態
- Reject:Promise が Rejected した状態
- Settled:処理が終わった状態