@vetsmen

Синхронный цикл в js?

Доброго времени суток. Как можно сделать синхронный цикл в node.js? У меня есть массив, по которому нужно поочередно пройтись и сделать некоторые асинхронные операции. Делаю так:
let items = [...];
items.forEach(async (item) => {
   let doOne = await somethingFn(item);
   let doTwo = await somethingFn2(item);
});

Однако forEach не ждет завершение текущей итерации и сразу же идет на следующую. Как выйти из ситуации? Решение "в лоб" вижу только написать рекурсивную функцию, что-то вроде:
let items = [];
(async function myFunction(i){
   if(i >= items.length) { return; }
   let doOne = await somethingFn(items[i]);
   let doTwo = await somethingFn2(items[i]);
   myFunction(i + 1); 
})(0);

Однако мне такое решение не очень нравится + возможны какие-либо утечки памяти с рекурсивным подходом.
  • Вопрос задан
  • 1938 просмотров
Решения вопроса 1
vitali1995
@vitali1995
Если нужна изолированность, можно сделать так:
await Promise.all(
  items.map(async (item) => {
     let doOne = await somethingFn(item);
     let doTwo = await somethingFn2(item);
  });
);


Но ничто не мешает перебирать массив в обычном цикле:
for (const item of items) {
   let doOne = await somethingFn(item);
   let doTwo = await somethingFn2(item);
)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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