如何在没有.then() 的情况下使用.finally()?
How to use .finally() without .then()?
我想要在每个 resolution/rejection 承诺之后 运行 的代码块(在 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() 块首先处理 resolution/rejection,似乎 .finally()
不会 运行。
有什么办法吗?
你可以这样做,但问题是为什么而不是如何
.finally()
实际上 将 运行 即使前面没有 .then()
或 .catch()
。但这样做是一种反模式,因为您正在避免处理可能阻止您的代码 运行ning.
的错误
此外,由于 .finally()
不公开响应或提供新的承诺,因此在实用性上不如其他两个。事实是,.finally()
只服务于它所针对的有限情况——到 运行 应该执行的代码,而不管承诺的命运如何,例如清理设置为指示其余部分的变量的申请承诺尚未返回,例如。
因此,虽然这不是一个完全没有意义的问题,但它不是一个值得关注的现实场景——您想要 运行 .finally()
而没有 .then()
或 .catch()
.
我想要在每个 resolution/rejection 承诺之后 运行 的代码块(在 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() 块首先处理 resolution/rejection,似乎 .finally()
不会 运行。
有什么办法吗?
你可以这样做,但问题是为什么而不是如何
.finally()
实际上 将 运行 即使前面没有 .then()
或 .catch()
。但这样做是一种反模式,因为您正在避免处理可能阻止您的代码 运行ning.
此外,由于 .finally()
不公开响应或提供新的承诺,因此在实用性上不如其他两个。事实是,.finally()
只服务于它所针对的有限情况——到 运行 应该执行的代码,而不管承诺的命运如何,例如清理设置为指示其余部分的变量的申请承诺尚未返回,例如。
因此,虽然这不是一个完全没有意义的问题,但它不是一个值得关注的现实场景——您想要 运行 .finally()
而没有 .then()
或 .catch()
.