Promise.all([p1,p2,p3]) 以数组的形式传入每个promise实例,返回一个新的promise对象
每个实例的结果均为resolve时,将结果推入数组中,并resolve出来。
有一个实例的结果为reject时,就reject出来
Promise.all方法的参数可以不是数组,但必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例。
Promise.all = promises => {
return new Promise((resolve,reject) => {
if(typeof promises[Symbol.iterator] != 'function' ){
reject('类型错误')
}
if(promises.length == 0){
reject([])
}else{
const targetArr = []
const len = promises.length
const index = 0
for(let i = 0;i<len;i++){
//通过Promise.resolve方法得到每个promise实例的结果
Promise.resolve(promises[i]).then(value => {
index++;
targetArr[i] = value
if(index == len){
resolve(targetArr)
}
}).catch(err => {
reject(err)
})
}
}
})
}