Redux Thunk 试图 return 一个承诺

Redux Thunk trying to return a promise

我在 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 调用上的 return 做一个承诺 returned,所以我知道操作已经完成,我可以用它进行另一个调用。但是,在我调用的另一个 actioncreator 中:

dispatch(updateValuesRouting(values, routingID).then(//put some other code here))

而我无法到达,说:

Uncaught TypeError: updateValuesRouting(...).then is not a function

我很确定这是我的语法错误。我以为我只需要在 axios 调用前有那个 return 就可以获得通过的承诺,但我想我还想念其他东西。提前致谢。

根据thunk document

Any return value from the inner function will be available as the return value of dispatch itself

您正在从您的 updateValuesRouting 返回承诺,因此您可以等待响应到达,稍微更改一下您的使用方式 then,您需要更改

dispatch(updateValuesRouting(values, routingID).then(

dispatch(updateValuesRouting(values, routingID)).then(...)

顺便说一句,您在 catch 块中错过了 Promise.reject()

希望这会有所帮助!

当您 return 承诺时,它会在调度调用上而不是在操作上。像这样

 dispatch(updateValuesRouting(values, routingID)).then(/*put some other code here*/))

不在行动本身

  dispatch(updateValuesRouting(values, routingID)).then()) // Gives an error