为什么使用 Promise.catch() 而不是 Promise.then()

nmx*_*mxl 3 javascript es6-promise

我在我的承诺链中的某个地方有一个被拒绝的承诺。我知道以下代码的工作方式类似。

let promise = Promise.resolve(3);
let p1 = promise.then(() => 2)
                .then(() => {throw 'some error'})
                .then(null, (err) => {console.log(err)})


let p2 = promise.then(() => 2)
                .then(() => {throw 'some error'})
                .catch((err) => {console.log(err)})
Run Code Online (Sandbox Code Playgroud)

将承诺链接到.then(null, (error) {})而不是仅仅在概念上有什么区别吗.catch((err) => {})

Wil*_*een 6

Promise.catch()等于Promise.then(null, callback)。您可以互换使用这些。但是 Promise.catch 更具描述性,并具有以下优点:

  1. 阅读 .catch 时比阅读时更容易知道它是一种错误处理机制 .then(null, callback)
  2. 实际上更少的代码,因为你可以省略null作为第一个参数.then()

总而言之,没有功能差异。但是,.catch()描述性更强,代码更少,因此更胜一筹。

至于承诺链接,它没有任何影响,因为它们在功能上是相似的。

  • 请注意,`then(f1, failf)` 是不一样的。如果 `f1` 中发生错误,则不会触发 `failf`。 (2认同)