angularjs 如何使用.finally()而不使用.then()?

dluptydi  于 2023-01-04  发布在  Angular
关注(0)|答案(1)|浏览(160)

我希望在每次解决/拒绝承诺后运行一个代码块(使用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()块首先处理解析/拒绝,.finally()似乎无法运行。
有什么办法吗?

h43kikqp

h43kikqp1#

    • 你可以做到,但问题是 * 为什么?* 而不是 * 如何?***

.finally()实际上即使前面没有.then().catch()也会运行,但这样做是一个反模式,因为您要避免处理可能阻止代码运行的错误。
此外,由于.finally()不公开响应或提供新的承诺,因此在实用性方面不如其他两种,事实是.finally()只适用于有限的情况--运行应该执行的代码而不考虑承诺的命运,例如清除设置为向应用程序的其余部分指示承诺尚未返回的变量,例如。
因此,这不是一个完全没有意义的问题,但也不是一个需要关注的现实场景--您希望在没有.then().catch()的情况下运行.finally()

相关问题