Promise.all = promiseAll
function promiseAll(param){
if(!Array.isArray(param)){
throw new Error(‘param is not Array‘) //首先判断下参数是不是数组
}else{
return new Promise((resolve)=>{ //return Promise,因为我们知道Promise.all是返回的Promise
let _arr_ = []
let index = 0
if(param.length == 0){
resolve(_arr_)
}
function processPromise(i,data){
_arr_[i] = data
if(++index == param.length){
//为什么我要重新定一个变量呢,如果换成_arr_.length会有什么问题呢
//因为当在3秒的那个执行完,他会将数组的第三项赋值,会造成第二项为空值
//输出结果很奇怪
resolve(_arr_)
}
}
for(let i=0;i<param.length;i++){
Promise.resolve(param[i]).then((data)=>{
console.log(111)
processPromise(i,data)
}).catch((err)=>{
console.log(err)
})
}
})
}
}
知道上面两个,我们就可以按顺序拿出我们想要的结果了