【问题标题】:Redux Thunk trying to return a promiseRedux Thunk 试图返回一个承诺
【发布时间】:2018-04-23 15:40:30
【问题描述】:

我在 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 做的是返回一个 promise,所以我知道动作已经完成,我可以用它进行另一个调用。但是,在我调用的另一个 actioncreator 中:

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

而我无法到达它,说:

未捕获的 TypeError: updateValuesRouting(...).then 不是函数

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

【问题讨论】:

  • updateValuesRouting 返回一个不是axios调用的函数;它返回一个接听dispatch 的电话。这不是语法错误,而是编程错误。
  • 那么我该如何重写它,以便我可以调用加载并让它返回承诺?

标签: javascript reactjs redux redux-thunk


【解决方案1】:

根据thunkdocument

内部函数的任何返回值都可以作为 dispatch 本身的返回值

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

dispatch(updateValuesRouting(values, routingID).then(

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

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

希望这会有所帮助!

【讨论】:

  • 你是对的,我错过了如何回调方法的语法。谢谢。
【解决方案2】:

当您返回一个承诺时,它将在调度调用而不是在操作上。像这样

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

不是动作本身

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

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 1970-01-01
    • 2019-08-14
    • 2016-11-14
    • 2018-01-08
    • 1970-01-01
    • 2021-06-03
    • 2017-11-14
    • 2015-11-27
    相关资源
    最近更新 更多