使用React Redux的多个AJAX请求

时间:2016-03-29 23:16:40

标签: ajax asynchronous reactjs redux

我想向两个不同的API发出请求。然后我需要组织这些数据。我正在使用redux-promise。

目前,我有一个函数,调用另外两个执行AJAX请求的函数:

export function fetchEstimates(input) {
  let firstRequest = fetchFirstRequest(input);
  let secondRequest = fetchFirstRequest(input);

  return {
    type: FETCH_DATA,
    payload: {
      firstRequest: firstRequest
      secondRequest: secondRequest
    }
  }
}

不幸的是,通过将两个请求放在一个对象中,我似乎无法访问结果。

export default function(state = [], action) {

  switch (action.type) {
    case FETCH_DATA:
      // console.log(action.firstRequest);
      // console.log(action.secondRequest);
      return result;
  }
  return state;
}

当我在开发工具中切换对象时,我来到这里:

[[PromiseStatus]]:"resolved"
[[PromiseValue]]:Object

我可以继续切换选项,但我似乎无法在我的代码中访问它们。

如果在我的有效载荷中,我只是返回

payload: firstRequest

我没有问题。但当然,我需要两个请求。有任何想法吗。处理这个问题的好方法是什么?

2 个答案:

答案 0 :(得分:1)

如果您查看source for redux-promise,就会发现它假设您已经提供了作为"有效负载"的承诺。你的行动中的字段。相反,你提供了一个带有两个promises的对象作为" payload"下的子字段。我假设你真的对两个承诺的解决感兴趣,然后将两个结果传递给reducer。您希望使用Promise.all创建一个新的承诺,将两个原始承诺的结果作为参数接收,然后将该承诺用作您的负载。然后,reducer将收到类似:{type : "DATA_RECEIVED", payload : [response1, response2]}

的内容

答案 1 :(得分:0)

您需要某种中间件来处理Promise s(如redux-thunk),并将Promise.all中的承诺包装起来等到它们都被解析。如果您需要代码示例,请告诉我。