任務:手動實現一個
promise.all
數組
promise.all
的特色:promise
Promise
實例組成的數組promise
,由於可使用.then
resolved
, 而且返回值組成一個數組傳給回調rejected
, 並將error
返回給回調function diPromiseAll(promises){
return new Promise((resolve, reject)=>{
// 參數判斷
if(!Array.isArray(promises)){
throw new TypeError("promises must be an array")
}
let result = [] // 存放結果
let count = 0 // 記錄有幾個resolved
promises.forEach((promise, index) => {
promise.then((res)=>{
result[index] = res
count++
count === promises.length && resolve(result) // 判斷是否已經完成
}, (err)=>{
reject(err)
})
})
})
}
複製代碼
let p1 = Promise.reject(1),
p2 = Promise.resolve(2),
p3 = Promise.resolve(3);
diPromiseAll([p1, p2, p3]).then((res)=>{
console.log(res, 'res')
}, (err)=>{
console.log(err, 'err')
})
// [1, 2, 3]
let p1 = Promise.reject(1),
p2 = Promise.resolve(2),
p3 = Promise.resolve(3);
diPromiseAll([p1, p2, p3]).then((res)=>{
console.log(res, 'res')
}, (err)=>{
console.log(err, 'err')
})
// 1 "err"
複製代碼