异步/等待比承诺慢吗?

时间:2018-02-25 21:03:34

标签: 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()

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'

1 个答案:

答案 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是全部或全部,所以如果一个承诺失败,它将立即拒绝,这不是你的第一个片段中的情况。