Make it to make it

いろいろ作ってアウトプットするブログ

Promise再入門(3)

Promiseを組み合わせる

JavaScriptはPromiseの組み合わせのために、Promise.all()Promise.race()という2つのビルトイファンクションが用意されている。

Promise.all()

Promise.all()はpromiseからなる配列を組み合わせて、それらの処理結果を含むかたちで一つのpromiseを返す。

const promises = [
  Promise.resolve('All the promises that I made'),
  Promise.resolve('is going to be'),
  Promise.resolve('resolved!')
]
const combinedPromises = Promise.all(promises)

combinedPromises.then(outcomes => {
  for (let i = 0; i < promises.length; i += 1) {
    console.log(outcomes[i])
  }
})

しかしこの例が上手くいくのは各々のPromiseが成功した場合であり、配列の中のpromiseの一つがrejectされると、上記のcombinedPromisesrejectされる。

そこでできるのが下記の方法

  • promise.then()を複数回使用する方法
  • Promise.all()にpromiseを複数回渡す
  • 上記2つのコンビネーションを行う

これらの方法も踏まえて、書いたスクリプトが以下。

github.com