承诺等到捕获结束或不结束?那么在这个例子中,首先显示“1或2”还是先显示“第一个或第二个”?
await promise().catch(()=>{
await anotherPromise();
alert("1 or 2");
});
alert("first or second");
答案 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");
还明确了警报的发生顺序。