@Maxla93

Как сделать чтобы foreach работал линейно, а не асинхронно?

Нужно реализовать паузу между каждым итемом в массиве, но как php не получается.
Подскажите как реализовать можно?

var arr = ["Яблоко", "Апельсин", "Груша"];


arr.forEach(function(item, i, arr) {

document.write(item);

  if ((i % 1) == 0)
  {
    document.write("пауза 1 секунды<br />");
    sleep(1);
  }

});
  • Вопрос задан
  • 293 просмотра
Пригласить эксперта
Ответы на вопрос 4
@napa3um
const arr = ['Яблоко', 'Апельсин', 'Груша'];

const iterator = i => new Promise((resolve, reject) =>
    setTimeout(() => {
        console.log(arr[i]);
        resolve();
    }, 1000)
)
.then(() => i + 1 < arr.length ? iterator(i + 1) : null);

iterator(0)
.then(() => console.log('DONE'))
.catch(err => console.log(err));
Ответ написан
Комментировать
var arr = ["Яблоко", "Апельсин", "Груша"];
arr.forEach(function(item, i, arr) {
  console.log(item);
  if ((i % 1) === 0) {
    console.log("пауза 1 секунды<br />");
    setTimeout(function(){},1000);
  }
});
Ответ написан
FFxSquall
@FFxSquall
Могу писать код, могу не писать
Можно следать так.
var i = 0, l = arr.length;
(function iterator() {
    console.log(arr[i]);

    if(++i<l) {
        setTimeout(iterator, 1000);
    }
})();
Ответ написан
Комментировать
RubaXa
@RubaXa
Ну и насоветовали вам, в JS можно точно так же, как и PHP, функция sleep реализуется в две строки, смотрите как просто:
["Яблоко", "Апельсин", "Груша"].forEach((item, i) => {
   console.log(item);

   if ((i % 1) == 0) {
    console.log("пауза 1 секунды");
    sleep(1);
  }
});

function sleep(sec) {
  const end = Date.now() + sec * 1e3;
  while (end > Date.now());
}
Ответ написан
Ваш ответ на вопрос

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

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