Redux Thunk试图回复承诺

时间:2018-04-23 15:40:30

标签: javascript reactjs redux redux-thunk

我在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呼叫面前回来以获得通过的承诺,但我想念其他的东西。提前致谢。

2 个答案:

答案 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