Promise.all should use function as params
Oct 16, 2015今天我們要聊的是:Promise.all
,他吃一個 Array,Promise.all 會試著去 resolve 每一個 array 中的 element,直到 throw error。
重點來了,當 Promise.all
throw error 之後整個 Promise.all
就 reject 了,我想要拿到部分 resolve 的值就拿不到了,我只能選擇全部成功或是全部失敗,這樣好像有點爛。
我有想到幾個解決方案:
- 把每一個可能會 throw error 的 Promise 包起來自己 handle error,意味著我們的這個 Promise wrapper 只會 resolve,這個方法的缺點是你必須去包裝每一個 Promise 很費工。 2.
我就想到了Promise.all為什麼不做成 Promise.all(arrayToBeResolve, arrayResolver, arrayRejector)
,讓 arrayResolver 跟 arrayRejector 去處理每一個 Promise.all 遍歷到的元素,但這樣又衍生了一個問題,就是 Promise.all 是 parallel 的處理 array,如果我想要 series 怎麼辦。
所以我就應該有兩隻 function,一個是PromiseTryResolveAllParallel,一個是PromiseTryResolveAllSeries,signiture 一樣
先來實作 PromiseTryResolveAllParallel:
function PromiseTryResolveAllParallel (arrayToBeResolve, elementResolver, elementRejector) {
return new Promise((resolve, reject) => {
let counter = 0
let result = Array(arrayToBeResolve.length)
arrayToBeResolve.forEach((element, index) => {
element.then
})
})
}