【发布时间】:2021-10-10 21:39:11
【问题描述】:
在我的 thunk 中,我在一个名为 dispatches 的数组中有两个调度,它们修改了 Redux 存储。只有在它们都完成之后(即修改了 Redux 存储),我才想调度 finalDispatchCall。我尝试将它们都放在Promise 中并调用then,但我仍然看到finalDispatchCall 是在secondDispatchCall 更新Redux 存储之前创建的。
const dispatches = [];
dispatches.push(dispatch(firstDispatchCall());
dispatches.push(dispatch(secondDispatchCall());
Promise.all([...dispatches]).then(() => {
dispatch(finalDispatchCall());
})
.catch(error => {
logger.error(
`Print out error - ${error}`
);
});
有没有办法在调用另一个调度之前确保调度已经完成?
编辑(更多细节):
firstDispatchCall 正在进行 API 调用(返回 fetch)并在 then 语句中调度操作以更新 redux 存储。 secondDispatchCall 还在进行 API 调用(返回 fetch)并在其 then 语句中分派另外两个操作,每个操作都进行自己的 API 调用并分派操作以更新 redux 存储。
我想等到所有这些都完成后再制作finalDispatchCall。
【问题讨论】:
-
似乎您的
firstDispatchCall和secondDispatchCall操作在完成工作之前立即解决(返回已解决的值)。您需要分享这些操作实际上在做什么,以便我们可以帮助您的代码等待它们。我怀疑您将async/await与 Promise 链混合在一起,实际上并没有等待任何操作。 -
@DrewReese
firstDispatchCall正在进行 API 调用(返回fetch)并在then语句中调度操作以更新 redux 存储。secondDispatchCall还进行 API 调用(返回fetch)并在其then语句中调度另外两个动作,每个语句都进行自己的 API 调用并调度动作以更新 redux 存储。我想等到所有这些都完成后再做finalDispatchCall。
标签: reactjs redux react-redux redux-thunk