(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]);
})()
一直认为是先打印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));
})()
这个符合我预期
Promise.all 只保证所有 Promise 完成之后完成,或者有 Promise 失败则触发整体失败。它不控制各个 Promise 的执行顺序。
实际上 Promise.all 的参数是 Promise 数组。而这些 Promise 在产生的时候都已经触发了异步执行,它们的执行顺序已经不受控了。