Promise.all里面的执行也异步?

(async ()=>{
let a = new Promise(resolve=>setTimeout(()=>{
       console.log('1');
       resolve('1');
   },1000));
let b = new Promise(resolve=>setTimeout(()=>{
       console.log('2');
       resolve('2');
   },800));
   await Promise.all([a,b]); 
})()

image.png
一直认为是先打印1,后打印2。试了下发现不是我想的那样

(async ()=>{
await new Promise(resolve=>setTimeout(()=>{
       console.log('1');
       resolve('1');
   },1000));
await new Promise(resolve=>setTimeout(()=>{
       console.log('2');
       resolve('2');
   },800));
    
})()

image.png
这个符合我预期

阅读 1.7k
2 个回答

Promise.all 只保证所有 Promise 完成之后完成,或者有 Promise 失败则触发整体失败。它不控制各个 Promise 的执行顺序。

实际上 Promise.all 的参数是 Promise 数组。而这些 Promise 在产生的时候都已经触发了异步执行,它们的执行顺序已经不受控了。

Promise.all里面的执行也异步?

是的

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