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

try/catch无法捕获promise.reject的问题

try/catch无法捕获promise.reject的问题

FFIVE 2019-03-22 10:15:24
function f2() {  try {    Promise.reject('出错了');  } catch(e) {    console.log(e)  }}执行f2(),无法通过try/catch捕获promise.reject,控制台抛出Uncaught (in promise)async function f() {  try {    await Promise.reject('出错了')  } catch(e) {    console.log(e)  }}为什么改成await/async后,执行f()就能在catch中捕获到错误了,并不会抛出Uncaught (in promise)
查看完整描述

4 回答

?
ITMISS

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

这样应该就理解了吧,拒绝发生在未来。


function f2() {

  try {

    Promise.reject('出错了').catch(err => {

      console.log('2', err)

    });

    console.log('1')

  } catch (e) {

    console.log(e)

  }

}


查看完整回答
反对 回复 2019-04-04
?
拉风的咖菲猫

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

try..catch 结构,它只能是同步的,无法用于异步代码模式


查看完整回答
反对 回复 2019-04-04
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

回答这个问题,原理还是探究await到底执行了什么操作?
await:表示暂停异步函数promise,等待任意表达式的执行结果。
对于f2函数,Promise.reject('出错了')异步执行,但是没有catch函数进行reject处理。
对于f函数,await Promise.reject('出错了')。相当于在后面加一个catch处理方法,方法返回传入的‘出错了’信息,所以不会报错。

查看完整回答
反对 回复 2019-04-04
?
慕标5832272

TA贡献1966条经验 获得超4个赞

21世纪了,用原生的async 和promise吧


查看完整回答
反对 回复 2019-04-04
  • 4 回答
  • 0 关注
  • 1714 浏览
慕课专栏
更多

添加回答

举报

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