我有一个链接承诺的问题,这些承诺分配了参数:
这是我的初始链:
dispatchTermsCondition(history, dispatch)
.then((history, dispatch)=>
dispatchSetPrivacy(history, dispatch)
)
.then(()=>
dispatcherUserTermsPrivacy(history,dispatch, getState,response.data.tj_id)
);
第一个链工作正常,当它到第二个链时,它无法找到我发送给它的参数。 这是我的第二个函数(dispatchSetPrivacy):
export function dispatchSetPrivacy(history, dispatch) {
return axios.get("some url")
.then((response) => {
dispatch({
type: SET_PRIVACY,
payload: {
privacy: {id: response.data.id, content: response.data.content, version: response.data.version }
}
});
}).catch(function(response){
console.log(response);
history.push("/error");
});
}
这是我得到的错误:
TypeError:dispatch不是函数 在bundle.js:76071
它发生在dispatchSetPrivacy。
有什么想法吗?
答案 0 :(得分:0)
所以这一行:
.then((history, dispatch) =>
dispatchSetPrivacy(history, dispatch)
)
将返回dispatchSetPrivacy
的结果,但在.then
中没有返回任何内容,因此不会有任何参数。如果你想传递参数,那么在回报中传递一些东西,例如:
export const dispatchSetPrivacy = (history, dispatch) =>
axios.get("some url")
.then((response) => {
dispatch({
type: SET_PRIVACY,
payload: {
privacy: { id: response.data.id, content: response.data.content, version: response.data.version }
}
});
return response;
})
...
没有必要传递调度和历史记录,因为它们可以从较高的范围(redux thunk)获得,你应该只能从那里使用它们:
const yourThunk = (history, otherArg) => (dispatch, getState) => {
dispatchTermsCondition(history, dispatch)
.then(() =>
dispatchSetPrivacy(history, dispatch)
)
.then((response) =>
dispatcherUserTermsPrivacy(history, dispatch, getState, response.data.tj_id)
);
};
请注意,不完全确定历史记录是来自模块还是来自params,但您明白了!