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

Ton*_*nas 4 angularjs q

我希望在每次解决/拒绝承诺之后运行一段代码($q在 AngularJS 1.6.x 中使用)。

我知道我能做到:

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

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

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

但我只想写这样的东西:

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

.finally()如果没有 then() 或 catch() 块首先处理解析/拒绝,它似乎不会运行。

有办法做到这一点吗?

Ton*_*nas 5

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

.finally()事实上,即使没有或在它之前也会运行。但这样做是一种反模式,因为您要避免处理可能阻止代码运行的错误。.then().catch()

此外,由于.finally()不公开响应或提供新的承诺,因此它的实用性不如其他两个。事实是,.finally()它仅适用于有限的情况——运行无论承诺的命运如何都应该执行的代码,例如清理设置为向应用程序的其余部分指示承诺尚未执行的变量例如,但又回来了。

因此,这不是一个完全无意义的问题,但也不是一个值得关注的现实场景——您希望在.finally()没有.then()or 的情况下运行.catch()