我在Redux中有以下actionCreator:
export function updateValuesRouting(values, routingID ){
const url = `${ROOT_ROUTINGS_URL}/${routingID}/editing/meta`;
console.log("routing url:: ",url, values);
return dispatch => {
dispatch({type: UPDATE_VALUE_ROUTING_LOADING, isLoaded: false});
return axios.put(url, values)
.then(({data}) => {
console.log("returned values from updateValuesRouting:",data);
dispatch({type: UPDATE_VALUE_ROUTING, data, isLoaded:true})
return Promise.resolve();
})
.catch((err) => {
dispatch(alertMessage("danger", `${routingID} has not updated values. ${err}`));
dispatch({type: UPDATE_VALUE_ROUTING_FAILURE, isLoaded: true})
})
}
}
我想对axios呼叫的返回做的是返回一个承诺,所以我知道动作已经完成,我可以用它再打一次电话。但是,在另一个动作中我打电话:
dispatch(updateValuesRouting(values, routingID).then(//put some other code here))
我无法触及它,说道:
未捕获TypeError:updateValuesRouting(...)。然后不是函数
我很确定这是我的语法错误。我以为我只需要在axios呼叫面前回来以获得通过的承诺,但我想念其他的东西。提前致谢。
答案 0 :(得分:2)
根据thunk
document
内部函数的任何返回值都可以作为 调度本身的返回值
您将从updateValuesRouting
返回承诺,因此您可以等到响应到达时使用then
进行更改,您需要更改
dispatch(updateValuesRouting(values, routingID).then(
到
dispatch(updateValuesRouting(values, routingID)).then(...)
顺便说一下,你在Promise.reject()
阻止中错过了catch
。
希望这会有所帮助!
答案 1 :(得分:2)
当您返回承诺时,它将在发送呼叫上而不是在该动作上。喜欢这个
dispatch(updateValuesRouting(values, routingID)).then(/*put some other code here*/))
不在行动本身
dispatch(updateValuesRouting(values, routingID)).then()) // Gives an error