采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
promise.all的实现 老师课程里面使用的是push方法向result里面添加结果,最后会不会导致all返回的结果顺序不符合预期,比如我传入的第一个promise是异步返回的,后面的是同步返回的,但是当我拿到结果的时候发现异步返回的结果被放置到了数组的最后位置,但是我本身的预期是想让他按顺序返回,即使第一个promise是异步的,但我最后拿到结果时,他依然应该排在结果数组的第一位
文字看的有点模糊。
可以写出代码示例,结合代码描述
// 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
是的,你提出的问题非常好,用 push 确实会导致异步顺序不一致的问题。下次升级我改造一下这里。
登录后可查看更多问答,登录/注册
双越老师带你体系化掌握大厂前端面试知识与流程
814 8
95 7
412 5
222 5
428 5