promise.all()会按照顺序返回吗

let promises = [1,2,3,4].map(function (id) {
  return me.getHighBid(id);
});
Promise.all(promises).then(posts){
    console.log(posts)
}

代码如上,使用Promise.all管理4个ajax请求,那么成功返回来的posts数组会严格按照id分别为1,2,3,4请求得到的数据来排序吗

阅读 22.7k
3 个回答

会的 (我靠两个字的答案还不能提交)

如果这个promise队列里出现了reject,那么Promise.all()返回的结果会被一个reject而报销(其他正常返回也没用了),所以为此你最好使队列每一个ajax封装一个:

Promise.race(ajax,()=>new Promise(resolve=>{
    setTimeout(()=>reslove('timeout'),3000)
}))

这样也可以解决某一个ajax响应时间巨长,导致Promise.all()一直pending的问题

是会按顺序来排列的


本来打算就回一个'会'字,结果提示我回答太短,23333333

只会按并发执行的顺序返回!
比如有三个axios请求,Promise.all(p1, p2, p3),因为是并发异步执行所以p2有可能比p1先执行,如果请求顺序是p2, p1, p3,那么返回结果的顺序就是p2,p1,p3顺序执行的结果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题