首页 > 解决方案 > 为什么等待不能正确处理拒绝错误

问题描述

为什么 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并获得正确的结果?

标签: javascriptpromiseasync-await

解决方案


在第一个示例中,您创建了一个新的 Promise,它通过调用 来处理异常t.catch(),但您没有将它分配给t,因此t仍然是一个带有未处理拒绝的 Promise。

在第二个例子中,t引用链,它是一个带有处理拒绝的承诺(.catch()延续不抛出,所以它用 解析undefined),所以等待t不会导致async函数抛出。

然而,因为t在第一个例子中仍然包含一个被拒绝的承诺,等待它会导致async函数抛出。


推荐阅读