调度后减速器中的空对象



>我的动作创建器中有以下代码:这是我在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);
}

看起来您正在调度一系列未解决的承诺。 我会尝试等待他们解决,然后调度返回的结果:

...
Promise.all(subData).then(results => {
  dispatch({
    type: GET_DATA_AND_SUBDATA,
    data: { data, subData: results }
  }
});

祝你好运!

这次的问题更清楚了。

您的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);
}

最新更新