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されると、上記のcombinedPromises
もrejectされる。
そこでできるのが下記の方法
promise.then()
を複数回使用する方法Promise.all()
にpromiseを複数回渡す- 上記2つのコンビネーションを行う
これらの方法も踏まえて、書いたスクリプトが以下。