Promise Catch后面的then还是会执行?

如果我想如果报错就捕获catch,并且不执行后面的then的话要怎么做呢?如果改变顺序使用.then.catch,then里面要是报错也会被catch捕获

阅读 16.5k
3 个回答

我自己之前的解决方案是,不在Promise的catch中捕获异常,而是用try~catch包裹,在这个catch里捕获异常。

如这段代码:

// 函数A只返回一个reject异常
function A() {
    return Promise.reject(new Error(Math.random()));
}

// 这样会先执行catch,然后执行后面的then
A().then(() => console.log('第一个then'))
    .catch(e => console.error(e))
    .then(() => console.log('第二个then'))

// 任意Promise中的catch异常,都会阻断后面代码的执行,并跳转到try中的catch,被捕获 
// 多个Proimise也一样
try {
    A().then(() => console.log('第一个then'))
        .then(() => console.log('第二个then'))
} catch(e) {
    console.error(e);
}

只要不执行resolve()函数就不会进入then

.catch的回调里返回Promise.reject()就不会执行了

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