【发布时间】:2019-06-11 22:44:36
【问题描述】:
为什么 promise catch 不能与 await 一起使用?
我想在被拒绝时捕获错误,但我得到了两个不同的结果
(async () => {
var t = (new Promise((r1, r2) => r2(12345)));
t.catch(e=> console.log(e));
await t;
})()
导致错误:VM5989:1 Uncaught (in promise)
(async () => {
var t = (new Promise((r1, r2) => r2(12345))).catch(e=> console.log(e));
await t;
})()
不会导致错误并返回 12345
演示图片:
在 node@12 / chrome@75 console ,我得到了两个不同的结果。
当我使用t.catch 时,我得到了Unhandled promise rejection。
当我使用(new Promise()).catch 时,我得到了除了结果。
为什么?以及如何使用t 并获得正确的结果?
【问题讨论】:
-
在第一个示例中,
t包含一个被拒绝的承诺,而你await为它。awaiting 被拒绝的承诺会引发异常。在第二个示例中,t包含一个已解决的承诺。await一个已解决的承诺返回一个已解决的值。 -
因为
.catch实际上并不是承诺链t的一部分。您已经创建了第二个带有错误处理的链,然后被忽略。如果您使用t = t.catch(...),您会看到不同的行为。
标签: javascript promise async-await