你考虑过 Redux Sagas 吗?https://redux-saga.js.org/
这是专门为使使用异步函数更易于管理而创建的。而且我认为实现这一点可以使您的异步函数更易于理解,并且更易于调试。
您的代码是有效的 javascript,但由于函数的异步性质,您可能会遇到状态不一致的情况。
如果在调度下一个操作之前您的异步操作未完成,则第二个操作将使用状态的一个版本,该状态可能会在运行时被第一个操作改变。
这种行为可能会给您带来您所描述的问题。
编辑:在我了解到您已经在使用 redux-thunks 之后
在 redux thunk 中,您可以将操作分派与等待链接在一起,并利用分派的返回。
本文中有关如何使用 redux-thunk 链接操作的示例:https ://blog.jscrambler.com/async-dispatch-chaining-with-redux-thunk/
const dispatchChaining = () => async (dispatch) => {
await Promise.all([
dispatch(loadPosts()), // <-- async dispatch chaining in action
dispatch(loadProfile())
]);
return dispatch(updateDone());
};
const actions = redux.bindActionCreators({dispatchChaining}, store.dispatch);
actions.dispatchChaining().then(() => unsubscribe());
请注意,只要有返回,这些分派就可以进行。这里的好处是我们可以并行触发异步调度并等待两者完成。然后,更新 isDone 知道这两个调用都已完成,没有任何不可预测的行为。这些可重用的 thunk 可以存在于存储的不同部分以保持关注点分离。