javascript – Promise.then(a,b)和Promise.then(a).catch(b)一样吗?

前端之家收集整理的这篇文章主要介绍了javascript – Promise.then(a,b)和Promise.then(a).catch(b)一样吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > When is .then(success,fail) considered an antipattern for promises?5个
有什么区别

>

07001.then(a,b)

>

07001.then(a).catch(b)

无论myPromise的内容和状态以及函数a和b的实现如何,两个JavaScript表达式总是会产生相同的结果吗?

除了代码可读性之外,我是否应该更喜欢使用一个而不是另一个?

@H_403_17@

解决方法

它们处理then()回调中的错误的方式不同,在某些情况下,这可能是一个非常显着的差异,大多数人建议只使用catch().

例如,使用catch(),您可以捕获此错误

Promise.resolve('test')
.then(r => {
  throw("whoops")
})
.catch(e => console.log("caught error:",e))

使用then(a,b)样式你不能:

Promise.resolve('test')
.then(r => { throw("whoops")},e => console.log("caught error?",e))
// unhandled rejection (you'll need to look in the console)

除了一些测试场景之外,很难想到这种行为首选的用例.

您可以使用两者,这将在then()回调中捕获拒绝和错误,但这会使您比您可能需要的更令人困惑,除非您有一个特殊用例来区分这两种错误.例如哪个处理程序处理哪些错误

Promise.reject("rejected")
.then(r => {throw("whoops")},e => console.log("Promise 1: caught error in second function:",e))
.catch(e=> console.log("Promise 1: caught error in catch",e))

Promise.resolve("rejected")
.then(r => {throw("whoops")},e => console.log("Promise 2: caught error in second function:",e))
.catch(e=> console.log("Promise 2: caught error in catch",e))
@H_403_17@ @H_403_17@ 原文链接:https://www.f2er.com/js/158602.html

猜你在找的JavaScript相关文章