gpt4 book ai didi

javascript - 你能用一个预定义的 finally 返回一个 Promise 吗?

转载 作者:行者123 更新时间:2023-12-03 18:47:45 34 4
gpt4 key购买 nike

我有一个返回 Promise 的函数。当我在 .then() 中使用完该 Promise 后或 .catch() block ,我总是想执行相同的清理代码。我目前的设置是这样的:

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 donecatch done先登录,然后 finally done .然而,它似乎以完全相反的顺序执行 - 当我在 5 秒超时后解决 Promise finally done 5 秒后首先被记录,然后 then done紧接着。
我做错了什么或者一般可以这样做吗?我知道我可以追加 .finally()到每个单独的函数调用,但由于它总是相同的,我想把它放在函数定义中。

最佳答案

不,这是不可能的。 finally 是为了在给定的 promise 之后进行清理,而不是为了它的 thencatch方法。
你可以做的是通过thencatch将在 finally 之前附加的函数的方法:

const promiseWithFinally = (chain) => {
return new Promise((resolve, reject) => {
// resolve or reject at some point
setTimeout(resolve, 1000);
}).then(chain.then, chain.catch).finally(() => console.log('finally done'))
}

promiseWithFinally({
then: () => console.log('then done'),
catch: () => console.log('catch done')
})

关于javascript - 你能用一个预定义的 finally 返回一个 Promise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67585277/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com