请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Promise.all最后输出顺序的结果不符合预期

promise.all的实现 老师课程里面使用的是push方法向result里面添加结果,最后会不会导致all返回的结果顺序不符合预期,比如我传入的第一个promise是异步返回的,后面的是同步返回的,但是当我拿到结果的时候发现异步返回的结果被放置到了数组的最后位置,但是我本身的预期是想让他按顺序返回,即使第一个promise是异步的,但我最后拿到结果时,他依然应该排在结果数组的第一位

正在回答 回答被采纳积分+3

1回答

双越 2023-06-28 16:47:21

文字看的有点模糊。

可以写出代码示例,结合代码描述

0 回复 有任何疑惑可以回复我~
  • 提问者 慕容0509469 #1
    // all方法
    Mypromise.all = function (promiseList = []) {
            return new Mypromise((resolve, reject) => {
              const result = [];
              const promiseLength = promiseList.length;
              let resolveCount = 0;
              promiseList.forEach((p, index) => {
                p.then((data) => {
                  result.push(data);  // 这里使用的是push导致了后面的结果顺序错误
                  resolveCount++;
                  if (resolveCount === promiseLength) {
                    resolve(result);
                  }
                }).catch((err) => {
                  reject(err);
                });
              });
            });
          };
    
    
    const p1 = new Mypromise((resolve, reject) => {
            setTimeout(() => {
              resolve(100);
            }, 1000);
          });
          const p2 = Mypromise.resolve(200);
          const p5 = Mypromise.all([p1, p2]);
          console.log("p5", p5); // 这里打印的值是[200,100 ], 但是我预期的打印结果应该是[100,200] 所以all方法实现的代码里面是不是不应该直接用push来操作,应该写成result[index]=data
    回复 有任何疑惑可以回复我~ 2023-06-28 17:01:34
  • 双越 回复 提问者 慕容0509469 #2
    是的,你提出的问题非常好,用 push 确实会导致异步顺序不一致的问题。下次升级我改造一下这里。
    回复 有任何疑惑可以回复我~ 2023-06-29 08:05:38
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信