我希望在每次解决/拒绝承诺后运行一个代码块(使用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()
似乎无法运行。
有什么办法吗?
1条答案
按热度按时间h43kikqp1#
.finally()
实际上即使前面没有.then()
或.catch()
也会运行,但这样做是一个反模式,因为您要避免处理可能阻止代码运行的错误。此外,由于
.finally()
不公开响应或提供新的承诺,因此在实用性方面不如其他两种,事实是.finally()
只适用于有限的情况--运行应该执行的代码而不考虑承诺的命运,例如清除设置为向应用程序的其余部分指示承诺尚未返回的变量,例如。因此,这不是一个完全没有意义的问题,但也不是一个需要关注的现实场景--您希望在没有
.then()
或.catch()
的情况下运行.finally()
。