Как развернуть значение обещаний в JavaScript - PullRequest
0 голосов
/ 05 марта 2019

У меня есть следующий код:

...
const array = nestings.map(async nesting =>
    await Promise.all([
        getFirstDataFromDB();
        getSecondDataFromDB();
        getThirdDataFromDB();
    ]);
        .then([data1, data2, data3]) => ({data1: data1, data2: data2, data3: data3}))
        .catch(error => console.log(error))
...
console.log(array); // Promise

В console.log я получаю обещание, но как я могу получить сгенерированный массив?

1 Ответ

0 голосов
/ 05 марта 2019

Вам понадобится два Promise.all с - один для каждого отдельного элемента, а затем другой для массива этих Promise.all с.Когда Promise.all для всего массива разрешается, вы можете .map его результаты в массиве объектов, которые вы хотите:

const arrayOfProms = nestings.map(nesting => Promise.all([
  getFirstDataFromDB(),
  getSecondDataFromDB(),
  getThirdDataFromDB()
]));
const arrOfData = await Promise.all(arrayOfProms);
const array = arrOfData.map(
  ([data1, data2, data3]) => ({data1: data1, data2: data2, data3: data3})
);

Пример фрагмента:

const getData = () => new Promise(res => setTimeout(res, 200, 'someval'));
const nestings = ['foo', 'bar', 'baz'];
(async () => {
  const arrayOfProms = nestings.map(nesting => Promise.all([
    getData(),
    getData(),
    getData()
  ]));
  const arrOfData = await Promise.all(arrayOfProms);
  const array = arrOfData.map(
    ([data1, data2, data3]) => ({data1: data1, data2: data2, data3: data3})
  );
  console.log(array);
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...