guys
就像在主题中一样,有没有一个解决方案可以等到调度操作完成,然后再调度另一个?
我需要重击吗?
dispatch(someAction());
当someAction
完成调度anotherAction()
时
dispatch(anotherAction());
这实际上取决于操作。正常的非thunk操作是同步的,因此在dispatch
之后的下一行中,第一个操作将已经被100%处理。如果您在那里调度thunk操作,则可以使用await
或.then(..)
(dispatch
返回的值(。
详细阐述@phry的思想。我使用redux工具包,并将其作为示例thunk:
export const EXAMPLE_THUNK = createAsyncThunk(
"group/event/example_thunk",
async () => {
// Just resolves after 2 seconds.
return await new Promise((resolve) => setTimeout(resolve, 2000));
}
);
要在第一次调度之后调度另一个操作,只需等待第一次调度即可。在我的示例中,我更新了加载状态。
虽然这个例子有效,但我不能100%确定这是最好的设计模式。我看到的很多例子都是更新状态是有些调度已经解决了!就我个人而言,我认为这是一种更清晰的代码编写方式
const handleChangeStatus = async () => {
setIsLoading(true);
await dispatch(EXAMPLE_THUNK())
// Or dispatch something else.
setIsLoading(false);
};