我正尝试在其他两个动作被调度 之后调度一个动作,由于这些动作,状态已更改。我已经读过redux-saga
,但我真的很希望在没有可能的情况下做到这一点(当前,我们正在使用redux-thunk
)。
我正在采用与Dan Abramov在这里提出的类似方法:https://github.com/reduxjs/redux/issues/723#issuecomment-139927639。
操作以正确的顺序执行,但是then()
内部的操作是在之前执行的,这是由于firstActionDispatcher改变了状态的函数。 >
我正在使用promise.all都使用下一种方法:
export const getData = categoryId => (dispatch, getState) => {
const state = getState();
const elements = state.categories && state.categories.elements && state.categories.elements[categoryId];
if (elements && elements.withMetadata) {
return false;
}
return Promise.all([
dispatch(firstActionDispatcher(categoryId)),
dispatch(secondActionDispatcher)
])
.then(() => dispatch({ type: THIRD_ACTION, data: Id }))
.catch(error => window.newrelic.noticeError(new Error(`[Error] ${error}`)));
};
更新说明1: firstActionDispatcher
返回的承诺与secondActionDispatcher
相同,
我已经为此苦苦挣扎了几天。
答案 0 :(得分:0)
如果您查看的是您提供的代码段,那么您将这样做:
return Promise.all([
dispatch(firstActionDispatcher(categoryId)),
dispatch(secondActionDispatcher)
])
.then(() => dispatch({ type: THIRD_ACTION, data: Id }))
请注意,secondActionDispatcher
没有被调用。我不确定这是否是错字,但您可能应该这样做:
return Promise.all([
dispatch(firstActionDispatcher(categoryId)),
dispatch(secondActionDispatcher()) // Notice the function call
])
.then(() => dispatch({ type: THIRD_ACTION, data: Id }))