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

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)


FFIVE
浏览 1715回答 4
4回答

ITMISS

这样应该就理解了吧,拒绝发生在未来。function f2() {  try {    Promise.reject('出错了').catch(err => {      console.log('2', err)    });    console.log('1')  } catch (e) {    console.log(e)  }}

拉风的咖菲猫

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

喵喵时光机

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

慕标5832272

21世纪了,用原生的async 和promise吧
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript