请问一下在Promise,如果reject不catch会怎样

就是如果有返回promise的方法,是不是每次调用都要写一个catch去捕获reject,不写的话,当await Method()时会不会一直堵塞住啊

阅读 8.9k
2 个回答

任何一个await语句后面的 Promise 对象变为reject状态,那么整个async函数都会中断执行。如果不catch, async函数直接抛出reject了, async里在await后面的代码是不会执行的。
一般写catch有以下几种方法(推荐使用第一种方法):
1 将await代码写在try catch代码块中, 这样当await抛出异常时直接被catch捕获,不会影响下面代码的运行。

async function f() {
  try {
    await Promise.reject('出错了');
  } catch(e) {
  }
  return await Promise.resolve('hello world');
}

f()
.then(v => console.log(v))

2 另一种方法是await后面的 Promise 对象再跟一个catch方法,处理前面可能出现的错误。

async function f() {
  await Promise.reject('出错了')
    .catch(e => console.log(e));
  return await Promise.resolve('hello world');
}

f()
.then(v => console.log(v))
// 出错了
// hello world

不 catch 又 reject 的时候会报错 Uncaught

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题