通过一个thunk传递一个异步响应

时间:2017-05-15 17:42:53

标签: redux-thunk

是否可以通过thunk传递异步“响应”?鉴于下面的动作创建者:

export function emitLoadPlot(json_req) {
  return function (dispatch) {
    axios.post(URI, {
      json_req
    })
    // .then(() => dispatch(
    //   emitTxRxAlert("yellow", "Received plot from server")
    // ))
    .then((response) => dispatch({
      type: EMIT_PLOT_DATA_REQ,
      payload: response
    }))
    .then(() => dispatch(
      emitTxRxAlert("green", "Loaded plot model")
    ))
    .then(() => dispatch({
      type: EMIT_LOAD_PLOT
    }))
    .then(() => dispatch({
      type: EMIT_VIEW_STATUS
    }))
  };
}

如果我取消注释警报调度,则response永远不会将其发送到需要的位置。说得通。其中一些调用(以及客户端上的操作)需要很长时间才能完成,我想在浏览器中异步请求返回到加载到redux存储之间交换客户端UI警报(比方说)。在这台缓慢的笔记本电脑上,网络请求比处理response所需的时间少得多。

我有没有办法通过上面的第一个thunk传递response(或对response的引用)?

1 个答案:

答案 0 :(得分:1)

调用then()会返回回调结果的承诺。

你的回调会返回dispatch()返回的内容,这不是你想要的值。

相反,您需要返回原始值:

.then(response => {
  dispatch(...);
  return response;
})