Синхронный цикл

У меня есть массив объектов. Для каждого объекта мне нужно вызвать асинхронную функцию, дождаться ее выполнения, а потом перейти к следующей итерации.

Делаю по мотивам этого ответа через async/await

async function process(data) {
  .........
  await asyncFunc({
    data: data,
    onfinished: function() {
      console.log("Finished");
    }
  });
}

async function loop() {
  const data = [1, 2, 3];
  for (let i = 0; i < data.length; i++) {
    ......
    console.log(data[i])
    await process(data[i]);
  }
}

И вижу в консоли

1
2
3
Finished
Finished
Finished

Чего не хватает для счастья?

Функция asyncFunc посылает аякс-запрос. Но она моя и изменить ее я не могу


Ответы (1 шт):

Автор решения: vsemozhebuty

Как-то так?

function process(data) {
  // .........
  return new Promise((resolve) => {
    asyncFunc({
      data: data,
      onfinished: resolve,
    });
  });
}

async function loop() {
  const data = [1, 2, 3];
  for (const item of data) {
    // ......
    console.log(item)
    await process(item);
    console.log("Finished");
  }
}
→ Ссылка