Promise.all = function (iterator) {//promise.all传入的为一个迭代器
const promises = Array.from(iterator)//将迭代器转化成数组
let count = 0
let res = []//储存结果
return new Promise((resolve,reject)=>{//promise.all返回一个promise对象
for (let i in promises){//对传入的数据进行遍历
Promise.resolve(promises[i])//将传入的数据每个都转化成promise对象
.then((data)=>{
res[i] = data//调用成功存入res中
if (++count === promises.length){//每次调用成功累加count,当count等于promises的长度,就表明每次都调用成功
resolve(res)//则返回resolve
}
})
.catch((e)=>{//当count不等于promises的长度则表示其中有失败的调用,则放回reject
reject(e)
})
}
})
}
手写promise.race(与all同理,不需要判断)
Promise.race = function (iterator) {
const promises = Array.from(iterator)
return new Promise((resolve,reject) => {
for (let i in promises) {
Promise.resolve(promises[i])
.then((res) => {
resolve(res)
})
.catch(e => {
reject(e)
})
}
})
}