我希望在每次对承诺的解析/拒绝后都可以运行一段代码(在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()块首先处理分辨率/拒绝的情况下无法运行。
有什么办法吗?
答案 0 :(得分:0)
您实际上可以做到这一点,但问题不是如何,而是为什么?
实际上,即使没有.finally()
或.then()
, .catch()
也会运行 。正如Claies在评论中提到的那样,但这是一种反模式,因为您要避免处理可能导致代码无法运行的错误。
此外,由于.finally()
不会公开响应或提供新的承诺,因此它的效用不如其他两个实用程序。确实,这仅适用于有限的情况-运行无论承诺的命运如何都应执行的代码,例如清除设置为指示尚未返回应用程序其余部分的变量,例如实例。
因此,尽管这不是一个完全没有意义的问题,但也不是要考虑的现实情况-您希望在没有.finally()
或.then()
的情况下运行.catch()
的地方。