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

发布于 2022-09-07 19:44:45 字数 242 浏览 14 评论 0

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

零崎曲识 2022-09-14 19:44:45

首先纠正一个误区:
谁说 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
  })
仙气飘飘 2022-09-14 19:44:45

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

大概就是这样

Promise.prototype.catch = function(fn){
    return this.then(null,fn);
}
各自安好 2022-09-14 19:44:45

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文