javascript - async/await 比 promises 慢吗?

标签 javascript asynchronous promise

在某些情况下使用 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/

相关文章:

javascript - 从 Python 中的 Node 命令捕获输出

javascript - 抑制 Safari 中的图像加载错误

javascript - 带有 WebSocket 的 typescript

c# - 锁定 C# switch case 的首选方式

node.js - 将 Promise 设置为变量并在稍后使用它

javascript - 如何在 Node 中调试基于 promise 的代码?

javascript - Promise 完成时出现问题

javascript - 隐藏客户端请求的 header

javascript - YouTube 异步函数

asp.net-mvc - 我应该在 ASP.NET MVC 4 中使用 AsyncController 吗?