等待直到.catch完成后等待

时间:2017-08-22 15:36:18

标签: javascript typescript promise

承诺等到捕获结束或不结束?那么在这个例子中,首先显示“1或2”还是先显示“第一个或第二个”?

await promise().catch(()=>{
    await anotherPromise();
    alert("1 or 2");
});
alert("first or second");

3 个答案:

答案 0 :(得分:1)

Alert("1 or 2");

将首先显示。

答案 1 :(得分:1)

通过operator predescendence,几乎没有什么可以击败函数调用和属性访问运算符。所以独立于你在那里做的事情:

await a.b.c().d;

首先评估它,然后等待结果。所以它不等待

的结果
promise()

而是

的结果
promise.catch(..)

将返回新的承诺。所以你的代码等于:

 promise().catch(()=>{
   await anotherPromise();
   alert("1 or 2");
 }).then(()=> alert("first or second") );

答案 2 :(得分:1)

是的,await等待承诺,.catch(…)返回一个使用回调结果解决的承诺(在您的情况下是承诺)。

但是,您忘记使用回调函数async,使用await会导致语法错误。而且你不会这样写它 - 而是使用

try {
    await promise();
} catch {
    await anotherPromise();
    alert("first");
}
alert("second");

还明确了警报的发生顺序。