Redux-Thunk Chaining Actions,得到一个“dispatch(...) then is not a function error
Redux-Thunk Chaining Actions, getting a "dispatch(...) then is not a function error
为了设置合成,我必须先获取输出对象。
我正在尝试复制示例,我觉得我正在正确复制语法,但我不断收到错误消息:
Uncaught TypeError: dispatch(...).then is not a function
Actions.js
export function setComposition(composition) {
return { type: types.SET_COMPOSITION, composition };
}
export function setOutputs(outputs) {
return { type: types.SET_OUTPUTS, outputs };
}
export function setOutputsAndComposition(outputs) {
return function (dispatch, getState) {
return dispatch(setOutputs(outputs)).then(() => // ERROR HERE
dispatch(setComposition(getState().Data.OutputObj))
);
}
}
编辑:理想情况下,我只想创建一个函数来执行此操作:
export function setOutputsAndComposition(outputs) {
return function (dispatch, getState) {
dispatch(setOutputs(outputs)).then(() =>
dispatch(setComposition(getState().Data.OutputObj))
);
}
}
但在某些地方我显然没有正确地使用语法
setOutputs()
正在返回一个普通的操作对象,因此不是 returns 承诺的 thunk。因此,链接 dispatch(setOutputs(outputs)).then()
将不起作用。
如果你只想在 setOutputs()
调度完成后立即调度另一个动作,你只需要将它们放在一起:
dispatch(setOutputs(outputs));
dispatch(setComposition(getState().Data.OutputObj));
您可以使用 setOutputs()
作为自定义中间件。在这种情况下,我将其用作 Promise
:
export function setComposition(composition) {
return { type: types.SET_COMPOSITION, composition };
}
export function setOutputs(outputs, dispatch) {
return new Promise((resolve, reject) => {
dispatch({type: types.SET_OUTPUTS, outputs});
resolve();
});
}
export function setOutputsAndComposition(outputs) {
return function (dispatch, getState) {
return setOutputs(outputs, dispatch).then(() => // NO ERROR HERE ANYMORE ^_^
dispatch(setComposition(getState().Data.OutputObj))
);
}
}
为了设置合成,我必须先获取输出对象。
我正在尝试复制示例,我觉得我正在正确复制语法,但我不断收到错误消息:
Uncaught TypeError: dispatch(...).then is not a function
Actions.js
export function setComposition(composition) {
return { type: types.SET_COMPOSITION, composition };
}
export function setOutputs(outputs) {
return { type: types.SET_OUTPUTS, outputs };
}
export function setOutputsAndComposition(outputs) {
return function (dispatch, getState) {
return dispatch(setOutputs(outputs)).then(() => // ERROR HERE
dispatch(setComposition(getState().Data.OutputObj))
);
}
}
编辑:理想情况下,我只想创建一个函数来执行此操作:
export function setOutputsAndComposition(outputs) {
return function (dispatch, getState) {
dispatch(setOutputs(outputs)).then(() =>
dispatch(setComposition(getState().Data.OutputObj))
);
}
}
但在某些地方我显然没有正确地使用语法
setOutputs()
正在返回一个普通的操作对象,因此不是 returns 承诺的 thunk。因此,链接 dispatch(setOutputs(outputs)).then()
将不起作用。
如果你只想在 setOutputs()
调度完成后立即调度另一个动作,你只需要将它们放在一起:
dispatch(setOutputs(outputs));
dispatch(setComposition(getState().Data.OutputObj));
您可以使用 setOutputs()
作为自定义中间件。在这种情况下,我将其用作 Promise
:
export function setComposition(composition) {
return { type: types.SET_COMPOSITION, composition };
}
export function setOutputs(outputs, dispatch) {
return new Promise((resolve, reject) => {
dispatch({type: types.SET_OUTPUTS, outputs});
resolve();
});
}
export function setOutputsAndComposition(outputs) {
return function (dispatch, getState) {
return setOutputs(outputs, dispatch).then(() => // NO ERROR HERE ANYMORE ^_^
dispatch(setComposition(getState().Data.OutputObj))
);
}
}