@artuh_a

Как правильно перебрать массив с асинхронными и синхронными запросами внутри?

Всем привет!

Перебираю массив с объектами и в зависимости от одного из значений, делаю либо асинхронный запрос на сервер, либо добавляю другое значение в результирующий массив. Немного встрял с асинхронностью, мне нужно, чтобы в массиве result был тот же порядок, что и в arr. А у меня получается, что все асинхронные результаты уходят в конец, как это исправить?

const arr = [
{k: true, id: 1},
{k: false, id: 2},
{k: false, id: 3},
{k: true, id: 4},
{k: false, id: 5},
{k: false, id: 6},
{k: true, id: 7}
];
const result = [];

arr.forEach(async ({ k, id }) => {
   if (k) {
      await api.getData(id).then((response) => {
         result.push(response);
     })
   } else {
         result.push(id);
   }
})
  • Вопрос задан
  • 296 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Последовательно:

async function processData(data) {
  const result = [];

  for (const { id, k } of data) {
    result.push(k ? await api.getData(id) : id);
  }

  return result;
}

Параллельно:

function processData(data) {
  return Promise.all(data.map(({ id, k }) => k ? api.getData(id) : id));
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы