提问人:pucca garu 提问时间:4/21/2023 更新时间:4/22/2023 访问量:74
然后工作,但 await 不适用于 thunk 操作的 Promise
Then works but await doesn't work with Promise from thunk action
问:
我正在使用 redux/toolkit 并有一个 thunk 操作来请求更新 API,然后进行导航。
我尝试返回一个承诺,以便我可以在导航之前等待操作完成。
问题在 API 调用后开始。如果我使用 Promise 可以正常工作,那么在我之后导航时不会出现任何问题。then
但是当我使用它时,我开始收到内存泄漏警告,并怀疑 Promise 可能在导航之前尚未解决。我尝试将导航设置TimeOut 5s,然后不再有警告。无论 API 调用是否成功,都会出现问题。await dispatch(updatePost())
// Thunk action trying to return a Promise
export function updatePost() {
return () =>
services
.update()
.then((response: any) => {
dispatch(updateFn())
return response?.data
})
.catch((error: any) => {
throw error
});
}
// This works fine
updatePost().then(() => {
navigation('/page');
})
// This cause memory leak warnings
await updatePost();
navigation('/page');
我需要使用的原因是我有更多的功能可以与 Promise.all 一起使用。如果您知道有什么问题,请提供帮助。谢谢。await
答:
0赞
Barry Michael Doyle
4/22/2023
#1
这里的问题是这不是一个承诺,所以即使你调用它也不是“真正”有效的,并且会像你期望的那样工作。updatePost
.then
您需要更新为如下承诺:updatePost
export async function updatePost() {
try {
const response = await services.update();
dispatch(updateFn());
return response?.data;
} catch (error) {
throw error;
}
}
现在您可以像这样安全地使用它:
await updatePost();
navigation('/page');
评论
dispatch(updateFn())