关于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?
亲人们可以给小菜鸡解释一下吗

#前端工程师#
全部评论
我也不懂,请问有谁知道吗?
点赞
送花
回复
分享
发布于 2022-03-29 13:51
then里面的内容被放在微任务队列中了
点赞
送花
回复
分享
发布于 2022-04-01 09:03
滴滴
校招火热招聘中
官网直投

相关推荐

2 4 评论
分享
牛客网
牛客企业服务