【发布时间】:2021-08-07 15:15:21
【问题描述】:
我有一个返回 Promise 的函数。当我在 .then() 或 .catch() 块中使用完该 Promise 后,我总是想执行相同的清理代码。我目前的设置是这样的:
const promiseWithFinally = () => {
return new Promise((resolve, reject) => {
// resolve or reject at some point
}).finally(() => console.log('finally done'))
}
promiseWithFinally()
.then(() => console.log('then done'))
.catch(() => console.log('catch done'))
我想要发生的是 then done 或 catch done 先被记录,然后是 finally done。然而,它似乎以完全相反的顺序执行 - 当我在 5 秒超时后解决承诺时,finally done 在 5 秒后首先被记录,然后then done 立即被记录。
我做错了什么或者一般情况下可以这样做吗?我知道我可以将.finally() 附加到每个单独的函数调用中,但由于它总是相同的,我想将它放在函数定义中。
【问题讨论】:
-
一般来说,您不应该依赖以任何特定顺序调用相同承诺的处理程序。即使您将
finally和then附加到同一个promise,我认为它们也会按照您定义它们的顺序被调用。 -
@NiettheDarkAbsol 这就是他的代码不起作用的原因。
-
你为什么期待promise最终变成这样?你会期望同步最终做到这一点吗?
-
您可能正在寻找promise disposer pattern。
标签: javascript promise