调度后减速器中的空对象

时间:2017-11-02 23:08:32

标签: promise react-redux axios redux-thunk

我的动作创建者中有以下代码:这是我在reducer中看到的内容 - " subData":[{},{},{}]} - 当我打印出来的时候是实际上是一个承诺 - 我尝试使用当时的转换,但没有运气..一直在努力...任何想法?

    export function getMainData() {
  return async function getMainData(dispatch) {
    const { data } = await getMainDataAPI();
    const subData = data.map((item) => {
      const endpoint = 'build with item.name';
      return Request.get(endpoint);
    });
     console.log('subddd' + subData);  prints -> **[object Promise],[object Promise],[object Promise]**
    dispatch({
      type: GET_DATA_AND_SUBDATA,
      payload: { data, subData }
    });
  };
}

async function getMainDataAPI() {
  const endpoint = 'url';
  return Request.get(endpoint);
}

2 个答案:

答案 0 :(得分:0)

这次问题更加清晰。

您的console.log会显示3个承诺对象的地图,因为在转到下一条指令之前,您没有等待API的结果。

基本上,您必须使用await Promise.all(data.map(async (item) => {而不是data.map((item) => {

工作代码下方:

export function getMainData() {
  return async function getMainData(dispatch) {
    const { data } = await getMainDataAPI();
    const subData = await Promise.all(data.map(async (item) => {
      const endpoint = 'build with item.name';
      return await Request.get(endpoint);
    }));
    dispatch({
      type: GET_DATA_AND_SUBDATA,
      payload: { data, subData: subData.data }
    });
  };
}

async function getMainDataAPI() {
  const endpoint = 'url';
  return Request.get(endpoint);
}

答案 1 :(得分:0)

看起来你正在派遣一系列未解决的Promises。我会尝试等待他们解决然后发送返回的结果:

...
Promise.all(subData).then(results => {
  dispatch({
    type: GET_DATA_AND_SUBDATA,
    data: { data, subData: results }
  }
});
祝你好运!