如何在没有.then() 的情况下使用.finally()?

How to use .finally() without .then()?

我想要在每个 resolution/rejection 承诺之后 运行 的代码块(在 AngularJS 1.6.x 中使用 $q)。

我知道我能做到:

myPromise()
  .then((response) => {
     // Do my important stuff here
  })
  .catch((response) => {
     // Copy code from above
  })

还有这个(稍微好一点):

myPromise()
  .catch(() => {})
  .then((response) => {
    // Do my important stuff here, and only write it once
  })

但我只想写这样的东西:

myPromise()
  .finally((response) => {
    // Do my important stuff here, only written once
  })

但如果没有 then() 或 catch() 块首先处理 resolution/rejection,似乎 .finally() 不会 运行。

有什么办法吗?

你可以这样做,但问题是为什么而不是如何

.finally() 实际上 运行 即使前面没有 .then().catch()。但这样做是一种反模式,因为您正在避免处理可能阻止您的代码 运行ning.

的错误

此外,由于 .finally() 不公开响应或提供新的承诺,因此在实用性上不如其他两个。事实是,.finally() 只服务于它所针对的有限情况——到 运行 应该执行的代码,而不管承诺的命运如何,例如清理设置为指示其余部分的变量的申请承诺尚未返回,例如。

因此,虽然这不是一个完全没有意义的问题,但它不是一个值得关注的现实场景——您想要 运行 .finally() 而没有 .then().catch().