先来看MDN官网对promise.all方法的介绍:
简单理解,当参数中的promise有一个失败了就直接返回失败的结果,返回第一个失败的结果,都成功返回所有的参数结果;
function PromisAll(promises){
// 返回一个promise实例
return new Promise((resolve,reject)=>{
// 做一个判断参数是否是数组
if(!Array.isArray(promises)){
return reject(new TypeError("arguments is not array"))
}
let count=0,result=new Array(promises.length);
//接收新的结果参数 建立一个伪数组
for(let i=0;i<promises.length;i++){
//运用promise特性 只会有一个状态
Promise.resolve(promises[i]).then((res)=>{
count++;
// 把每次返回成功的数据添加到数组中
result[i]=res;
if(count===promises.length){
// 数据接收完成
return resolve(result)
}
},rej =>reject(rej))
}
})
}
let prm1=new Promise((resolve,reject)=>{
resolve("1")
})
let prm2=new Promise((resolve,reject)=>{
reject("2")
})
let prm3=new Promise((resolve,reject)=>{
resolve("3")
})
let prm4=new Promise((resolve,reject)=>{
resolve("4")
})
PromisAll([prm1,prm2,prm3,prm4]).then(
(res)=>console.log("resdss",res),
(res)=>console.log("reeoe",res)
)