将具有延迟的异步 for 循环更改为同步 javascript

change asynchronous for loop with delay to synchronous javascript

我有函数内部循环的异步代码,它有这样的延迟

    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

我希望代码是同步的,因为我想在控制台上使用它,所以我需要代码顺序执行

您要做的事情太复杂了。可以用一个简单的队列来简化。有一个调用自身并为下一次迭代使用超时的函数。

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

run();