javascript - 为什么等待不能正确处理拒绝错误
问题描述
为什么 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
并获得正确的结果?
解决方案
在第一个示例中,您创建了一个新的 Promise,它通过调用 来处理异常t.catch()
,但您没有将它分配给t
,因此t
仍然是一个带有未处理拒绝的 Promise。
在第二个例子中,t
引用链,它是一个带有处理拒绝的承诺(.catch()
延续不抛出,所以它用 解析undefined
),所以等待t
不会导致async
函数抛出。
然而,因为t
在第一个例子中仍然包含一个被拒绝的承诺,等待它会导致async
函数抛出。
推荐阅读
- bash - 从 /etc/rc.local 运行时,如何通过 dbus 获取空闲时间?
- dart - 将字符串转换为有效的 TLS 证书
- flex-lexer - JFlex - lex 结构化文档
- python-3.x - Jupyter Notebook:错误:异步:回调中的异常
- python - Scrapy - 在不同的相对 url 中提取 url
- pandas - 获取 pandas DatetimeIndex 一周的开始日期?
- swift - 如何在真实设备上安装 iOS 应用程序以进行 iOS 测试自动化?
- javascript - 请帮助将数组转换为对象
- python - 前向和后向扩展窗口均值计算
- python-3.x - 需要互联网访问的 systemd 服务问题