изменить асинхронный цикл с задержкой на синхронный JavaScript - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть асинхронный код для функции внутри цикла, с такой задержкой

    const timeout = ms => new Promise(res => setTimeout(res, ms))
    async function sayHai() {
      for (var i = 0; i < 100; i++) {
          await timeout(1000);
          console.log("Hai");
          if ( (i%5) == 4 ) await timeout(30000);
      }
    }
    
    sayHai();

у меня есть этот код для генерации, как показано ниже:

hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
delay 30 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec

Я хочу, чтобы код был синхронным, потому что я хочу использовать его на консоли, чтобыМне нужно, чтобы код выполнялся последовательно

1 Ответ

0 голосов
/ 25 сентября 2018

То, что вы пытаетесь сделать, это сложный путь.Это можно упростить с помощью простой очереди.Имейте функцию, которая вызывает себя и использует время ожидания для следующей итерации.

function run() {
  let cnt = 0;
  function next() {
    cnt++;
    console.log(new Date().toLocaleString())
    window.setTimeout(next, cnt % 5 == 0 ? 5000 : 1000);
  }
  next();
}

run();
...