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

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

相关推荐

07-30 11:52
门头沟学院 Java
美团暑期实习没投递成功,这次正式批的北斗计划总该有我的一部分了吧!
求职的纳鲁多:大佬投我就不投了,毕竟王不见王,避你锋芒
点赞 评论 收藏
分享
温州头等大孝子:你们的确很幸福,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
字节跳动开奖364人在聊
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务