JS手写Promise.all
分析问题
- 函数入参(数组[常量|Promise实例]
- 函数返回值(Promise实例;resolve() 入参为all执行成功后的 数据数组;reject是执行失败;
- 函数内容(执行进入的参数,并存储执行后的结果【是个数组存储】,如果遇到入参中的Promise失败则返回失败)
Promise.all = function(Parry){
return new Promise((resolve, reject)=>{
let Count = 0;
let Pcount = 0;
let ParryRess = []
for(let p in Parry){
Count++
Promise.resolve(Parry[p]).then(res=>{
Pcount++
ParryRess[p] = res
if(Count == Pcount){
resolve(ParryRess)
}
}).catch(err=>{
reject(err)
})
}
})
}
Promise.all([1,2,Promise.resolve(3)]).then(res=>{
console.log(res);
}).catch(err=>{
console.log(err);
})
Promise.all([1,2,Promise.resolve(3),Promise.reject(0)]).then(res=>{
console.log(res);
}).catch(err=>{
console.log(err);
})
Promise.all(null).then(res=>{
console.log(res);
}).catch(err=>{
console.log(err);
})