为了账号安全,请及时绑定邮箱和手机立即绑定

有没有童鞋遇到过同样的问题:Promise捕获未处理的异常?万分感谢

有没有童鞋遇到过同样的问题:Promise捕获未处理的异常?万分感谢

鸿蒙传说 2019-06-13 10:20:47
console.log('herewego');newPromise(resolve=>{setTimeout(()=>{console.log(2)thrownewError('bye');//这里不行},2000);//thrownewError('bye');//放这里可以}).then(value=>{console.log(value+'world');}).catch(error=>{console.log('Error:',error.message);});
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

首先,在非async函数中,try-catch并不能捕获异步操作中产生的异常,Promise/setTimeout都是典型的异步操作。其次,Promise的catch会在resolve被调用之前throw的Error对象,或者reject被调用后触发。最后,setTimeout是个异步操作,当前操作执行完之后才会执行,所以当前的try-catch并不能处理setTimeout回调的异常。
综合以上3点,
你的throw在setTimeout中,且没有reject,Promise不能catch到
如果移动到setTimeout下一句,相当于你的Promise没有resolve之前throw了Error
                            
查看完整回答
反对 回复 2019-06-13
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

Node.js中未处理的Promise错误

监听unhandledRejection事件,即可捕获到未处理的Promise错误:

1process.on('unhandledRejection', (reason, promise) => ···);


示例代码:

1234567891011process.on('unhandledRejection', reason =>{    console.log(reason); // 打印"Hello, Fundebug!"}); function foo(){    Promise.reject('Hello, Fundebug!');} foo();

注: Node.js v6.6.0+ 默认会报告未处理的Promise错误,因此不去监听unhandledrejection事件也没问题。

FundebugNode.js错误监控插件监听了unhandledRejection事件,因此可以自动捕获未处理Promise错误。


查看完整回答
反对 回复 2019-06-13
  • 2 回答
  • 0 关注
  • 517 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号