如何在AngularJS中使用不带.then()的.finally()?

时间:2018-11-28 01:51:04

标签: angularjs q

我希望在每次对承诺的解析/拒绝后都可以运行一段代码(在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
  })

但是,似乎.finally()会在没有then()或catch()块首先处理分辨率/拒绝的情况下无法运行。

有什么办法吗?

1 个答案:

答案 0 :(得分:0)

您实际上可以做到这一点,但问题不是如何,而是为什么

实际上,即使没有.finally().then()

.catch()也会运行 。正如Claies在评论中提到的那样,但这是一种反模式,因为您要避免处理可能导致代码无法运行的错误。

此外,由于.finally()不会公开响应或提供新的承诺,因此它的效用不如其他两个实用程序。确实,这仅适用于有限的情况-运行无论承诺的命运如何都应执行的代码,例如清除设置为指示尚未返回应用程序其余部分的变量,例如实例。

因此,尽管这不是一个完全没有意义的问题,但也不是要考虑的现实情况-您希望在没有.finally().then()的情况下运行.catch()的地方。