UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【JavaScript】複数のPromiseをまとめて処理したい - Promise.allSettled

複数のPromiseをまとめて処理をしたくてPromise.allを使っていたが、allは複数のPromiseのうち一つでも Reject すると全体が Reject してしまう

どれかが失敗しようが全て実行して成功と失敗の配列で結果が欲しい場合Promise.allSettled()を使うとよいことがわかったので調べてみる

allSettled

以下の記事が参考になった

blog.jxck.io

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:処理が終わった状態