Promise中的then的异常处理方法和catch有什么区别?

promise中then和catch都可以处理异常,那么它们对于异常的处理有什么区别呢?

Promise.reject('error').then(()=> {}, val=> {
    console.log(val);
});

Promise.reject('error').catch(val=> {
    console.log(val);
});
阅读 15.9k
3 个回答

首先纠正一个误区:
谁说 reject 是用来处理异常的了- -reject 是用来抛出异常的,catch 才是用来处理异常的
类比传统的 try catch 写法,reject 就相当于 throw

然后 reject 是 Promise 的方法,而 catch 是 Promise 实例的方法:

let p = new Promise()
p.catch()
p.reject() // 没有这个东西
Promise.reject()
Promise.catch() // 没有这个东西

具体用法建议还是多看看文档吧。
https://developer.mozilla.org...

补充

回答一下题主修改后的问题,then 的第二个参数和使用 catch 的区别

主要区别就是,如果在 then 的第一个函数里抛出了异常,后面的 catch 能捕获到,而第二个函数捕获不到

p
  .then(function () {
    throw new Error()
  }, function () {
    // won't capture this error
  })
  .catch(function () {
    // will capture the error
  })

.catch 只是一个语法糖而己 还是通过 then 来处理的

大概就是这样

Promise.prototype.catch = function(fn){
    return this.then(null,fn);
}

then 的第一个函数出错了,后面的catch可以捕获,写到then的第二个函数则捕获不到

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