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

Promise为什么无法捕获错误?

Promise为什么无法捕获错误?

弑天下 2019-01-31 21:24:40
console.log('here we go');new Promise( resolve => {    setTimeout( () => {        console.log(2)        throw new Error('bye');//这里不行     }, 2000);   //    throw new Error('bye');//放这里可以}).then( value => {    console.log( value + ' world'); }) .catch( error => {    console.log( 'Error:', error.message); });
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

首先,在非async函数中,try-catch并不能捕获异步操作中产生的异常,Promise/setTimeout都是典型的异步操作。
其次,Promisecatch会在resolve被调用之前throwError对象,或者reject被调用后触发。
最后,setTimeout是个异步操作,当前操作执行完之后才会执行,所以当前的try-catch并不能处理setTimeout回调的异常。

综合以上3点,

  1. 你的throwsetTimeout中,且没有rejectPromise不能catch

  2. 如果移动到setTimeout下一句,相当于你的Promise没有resolve之前throwError


查看完整回答
反对 回复 2019-01-31
  • 1 回答
  • 0 关注
  • 999 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信