手写promise.all的要点:
- 在promise上面写,非在原型上写
- 参数为一个promise数组,返回值为一个promise对象
- 用数组记录结果
- 只要有一个reject就全部reject
Promise.all = function(list){
let res=[];// 记录成功结果的数组
let count=0; // 计数器:记录成功的次数
//返回promise对象
return new Promise((resolve,reject)=>{
list.map((promise,index)=>{
promise.then((x)=>{
res[index]=x
count++
if(count===list.length)// count等于list长度时,表示全部成功
resolve(res)
},(reason)=>{
reject(reason)
})
})
})
}