Я пытаюсь получить данные из Api с реакции, один API зависит от "ID" второй, - PullRequest
1 голос
/ 22 января 2020

вот мой код, первая выборка возвращает хорошие данные, а вторая - только обещание

    const data = await axios.get(
      `${API_URL}/${id}`
    );
    return data.data;
  };
  const fetchData = async () => {
    setLoading(true);
    const res = await axios.get("${API_URL}");
    setData(
        res.data.map(el => {
          const fromApi = fetchIncomes(el.id);
          return {
            ...el,
            ...fromApi
          };
        })
      )
    setLoading(false);
  };

1 Ответ

0 голосов
/ 22 января 2020

Вам нужно дождаться обещаний, возвращаемых fetchIncomes.

Попробуйте:

const fetchIncomes = async (id) => {
  const data = await axios.get(`${API_URL}/${id}`);
  return data.data;
};

const fetchData = async () => {
  setLoading(true);

  const res = await axios.get("${API_URL}");

  // Create array of promises
  const promises = res.data.map(el => {
    return fetchIncomes(el.id)
      .then(fromApi => {
        return {
          ...el,
          ...fromApi
        };
      });
  });

  // Await all promises to resolve
  const newData = await Promise.all(promises);

  // Update state with new data
  setData(newData);
  setLoading(false);
};

Примечание. Если вы хотите, вы также можете использовать asyn c -aait для Ваш массив обещаний:

const promises = res.data.map(async (el) => {
  const fromApi = await fetchIncomes(el.id);
  return {
    ...el,
    ...fromApi
  };
});
...