【问题标题】:Mapping API response - does not return and dispatch subsequent api calls映射 API 响应 - 不返回和调度后续 api 调用
【发布时间】:2018-04-14 07:54:30
【问题描述】:

这是我的动作创建者调用 - 有问题 - 我从第一个 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 });
        });
      };
    }

【问题讨论】:

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


    【解决方案1】:

    我认为您的 getSingleDATA() 函数已被柯里化,并且您没有调用返回的函数(期望您将其传递给 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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 2014-04-30
      • 2015-08-19
      • 2018-04-12
      相关资源
      最近更新 更多