Promise.all возвращает только разрешенные обещания при использовании с async / await - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь выполнить динамическое моделирование данных c с помощью async / await. У меня есть две конечные точки, первая вернет массив объектов. У этих сущностей в массиве есть дочерние элементы, которые должны быть получены из другой конечной точки.

Поэтому результат, который я пытаюсь достичь, похож на:

[{
  root: {
    id: 'root1'
  },
  children: [
    {
      id: 'child1'
    }, 
    {
      id: 'child2'
    }, 
  ]
}]

Вот как я пытаюсь решить это:

  let data = await rootLevel();
  let levelOneData = [];
  levelOneData = data.map((e) => {
    let rootNode = {};
    rootNode["root"] = e;
    return rootNode;
  });

  let levelTwoData = await Promise.all(
    levelOneData.map(async (e) => {
      let response = await fetch(
        `APIURL{e.parent.ID}`
      );
      let responseJSON = response.json();
      e["children"] = responseJSON;
      return e;
    })
  );

  const rootLevel = async () => {
    let response = await fetch(
      `APIURL`
    );
    return response.json();
  };

Что я ожидаю:

children: {Array(26)}

Что я получаю:

children: Promise {<resolved>: Array(26)}

Я что-то наблюдаю в моей цепочке Promise.all , так что я получаю только обещанные Обещания в моем объекте данных, какие-либо советы о том, как получить простые данные там? Или как преобразовать массив разрешенных обещаний в реальные данные?

1 Ответ

2 голосов
/ 06 апреля 2020

Измените это:

let responseJSON = response.json();

на это:

let responseJSON = await response.json();

response.json() является асинхронным и возвращает обещание. Вы просто вкладывали это обещание в свой результат, даже не ожидая его.

...