在某些情况下使用async / await比使用promises更慢吗?
使用promises考虑这样的代码
function foo() {
const p1 = new Promise(res => setTimeout(() => res('first'), 2000));
const p2 = new Promise(res => setTimeout(() => res('second'), 2000));
p1.then(console.log);
p2.then(console.log);
}
foo()
2000ms之后'first'
然后'second'
打印到控制台。
使用async / await
的相同代码async function foo() {
const p1 = await new Promise(res => setTimeout(() => res('first'), 2000));
const p2 = await new Promise(res => setTimeout(() => res('second'), 2000));
console.log(p1);
console.log(p2);
}
foo();
使用async / await需要4000毫秒来打印'first'
和'second'
答案 0 :(得分:3)
相当于async / await
中的第一个代码段错误,应该是:
async function foo() {
const p1 = new Promise(res => setTimeout(() => res('first'), 2000));
const p2 = new Promise(res => setTimeout(() => res('second'), 2000));
const result = await Promise.all([p1,p2]);
console.log(result[0]);
console.log(result[1]);
}
foo();
你的第一个片段同时运行promises,第二个同步运行promises。这就是await
应该谨慎使用的原因。
<强> CAVEAT 强>
正如@Bergi指出的那样,请记住Promise.all
是全部或全部,所以如果一个承诺失败,它将立即拒绝,这不是你的第一个片段中的情况。