在某些情况下使用 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()
2000 毫秒后,'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'
最佳答案
您在 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();
您拥有的第一个片段同时运行 promise ,第二个片段同步运行。这就是为什么 await
应该谨慎使用并了解情况。
警告
正如@Bergi 所指出的,请记住 Promise.all
是全有或全无,因此如果一个 promise 失败,它将立即拒绝,这在您的第一个片段中不是这种情况。
关于javascript - async/await 比 promises 慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48978435/