映射API响应 - 不返回和分派后续的api调用

时间:2017-11-01 21:55:25

标签: reactjs promise async-await react-redux axios

这是我的动作创建者调用 - 有问题 - 我从第一次api调用中获取数据,但是当我通过并尝试再拨几个电话时(在这种情况下为3)它直到返回它调用的地方才到达下一组电话 - 我的代码中的问题是什么?

 export function getData() {
      return async function getData(dispatch) {
        const { data } = await getDataAPI();
        dispatch({ type: GET_DATA, payload: data });
        Object.keys(data).map(async (keyName, keyIndex) => {
          const ENDPOINT = 'build the url with keyName';
          getSingleDATA(ENDPOINT);
        });
      };
    }

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

    async function getSingleDATA(ENDPOINT) {
      //CODE DOES NOT GO TO THE LINE BELOW
      return function dispatchgetSingleDATA(dispatch) {
        Request.get(ENDPOINT).then((response) => {
          dispatch({ type: GET_SINGLEDATA + keyIndex, payload: response });
        });
      };
    }

1 个答案:

答案 0 :(得分:0)

我认为你的getSingleDATA()函数是curry,并且你没有调用返回的函数(期望你传递它dispatch)。我认为它应该是这样的:

...
Object.keys(data).map(async (keyName, keyIndex) => {
  const ENDPOINT = 'build the url with keyName';
  getSingleDATA(ENDPOINT)(dispatch);
});

其次,你甚至需要咖喱吗?在我看来,您可以将getSingleDATA()函数重写为:

async function getSingleDATA(ENDPOINT, dispatch) {
  return Request.get(ENDPOINT).then((response) => {
    dispatch({ type: GET_SINGLEDATA + keyIndex, payload: response });
  });
}

...然后传入dispatch作为上面的第二个参数(也看起来getSingleDATA()期望使用keyIndex,所以最好也传递它:)

getSingleDATA(ENDPOINT, dispatch);  //don't forget keyIndex (not shown)

希望这会有所帮助。祝你好运!