关于promise.all
function promiseAll1 (args) {
const promiseResults = [];
let iteratorIndex = 0;
// 已完成的数量,用于最终的返回,不能直接用完成数量作为iteratorIndex
// 输出顺序和完成顺序是两码事
let fullCount = 0;
// 用于迭代iterator数据
return new Promise((resolve, reject) => {
for (const item of args) {
// for of 遍历顺序,用于返回正确顺序的结果
// 因iterator用forEach遍历后的key和value一样,所以必须存一份for of的 iteratorIndex
let resultIndex = iteratorIndex;
iteratorIndex += 1;
// 包一层,以兼容非promise的情况
Promise.resolve(item)
.then(res => {
promiseResults[resultIndex] = res;
fullCount += 1;
// Iterator 接口的数据无法单纯的用length和size判断长度,不能局限于Array和 Map类型中
if (fullCount === iteratorIndex) {
resolve(promiseResults)
}
})
.catch(err => {
reject(err)
})
}
// 处理空 iterator 的情况
if(iteratorIndex===0){
resolve(promiseResults)
}
})
} 看到一段代码,手写的promise.all,有个地方不明白,每次遍历item,fullcount+1不就和iteratorIndex相等了吗?为什么会在遍历完才resolve?
亲人们可以给小菜鸡解释一下吗
#前端工程师#
