首页 > 解决方案 > 等待异步动作创建者更新另一个动作创建者内部的状态

问题描述

我有一个执行异步请求并更新状态的操作创建器(使用 react-redux 中间件):

export function requestA() {
  return function (dispatch) {
    dispatch(startRequest())
    return Service.getA().then(
      data => dispatch(receivedA(data)),
      error => console.log("An error occurred.", error)
    )
  }
}

这很好用。现在我想创建另一个动作创建者,它将使用requestA()动作创建者,并调用另一个异步请求。

export function requestB() {
  return function (dispatch, getState) {
    dispatch(requestA()) // <--- How to await for this ???
    let A_data = getState().A_data;
    return Service.getB(A_data).then(
      data => dispatch(receivedB(data)),
      error => console.log("An error occurred.", error)
    )
  }
}

dispatch(requestA())在继续运行其余功能之前,我有没有办法等待完成?在继续下一个请求之前,我需要更新状态。

注意 我知道我可以通过在我的动作创建器中调用 2 个请求来做到这一点,但我想知道我是否可以通过调用 来做到这一点dispatch(requestA()),因为已经设置了逻辑。

标签: javascriptreactjsreact-reduxredux-thunk

解决方案


您只需要等待调用函数完成使用await async关键字:

export function requestA() {
  return async function (dispatch) {
    dispatch(startRequest())
    await Service.getA().then(
      data => dispatch(receivedA(data)),
      error => console.log("An error occurred.", error)
    )
  }
}

推荐阅读