Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
延迟javascript循环中的延迟_Javascript_Node.js_Loops_Delay - Fatal编程技术网

延迟javascript循环中的延迟

延迟javascript循环中的延迟,javascript,node.js,loops,delay,Javascript,Node.js,Loops,Delay,我有一个循环已经有了这样的延迟 for (var i = 0; i < 100; i++) { setTimeout( function (i) { console.log("Hai") }, 1000*i, i); } 这可能吗?const timeout=ms=>新承诺(res=>setTimeout(res,ms)) const timeout = ms => new Promise(res => setTimeout(res, ms))

我有一个循环已经有了这样的延迟

for (var i = 0; i < 100; i++) {
    setTimeout( function (i) {
        console.log("Hai")
    }, 1000*i, i);
}
这可能吗?

const timeout=ms=>新承诺(res=>setTimeout(res,ms))
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(){ 对于(变量i=0;i<100;i++){ 等待超时(1000); 控制台日志(“Hai”); 如果((i%5)==4)等待超时(30000); } }
最简单的方法,没有承诺

let i = 1
function timeout(){
    i++
    setTimeout(()=>{
        console.log("Hai")
        timeout()
    },i % 5 === 0 ? 30000 : 1000)
}
timeout()

这是一种非常糟糕的方法,您应该使用一个计数器,而不是运行100个实例。请参见
setInterval()
i>=5?30000+1000*i:1000*i
我每5次需要一次而不是前5次问题和你的答案之间有关系吗?@GerardH.Pille什么?编辑后,情况好多了。但是OP要求每5次迭代额外暂停30秒。您将1秒的暂停替换为30秒的暂停,这不是所要求的。此外,当OP在100次迭代后停止时,您从未停止过,而且您的代码甚至无法工作。您忘记调用
sayHai()
,即使在调用它时,在第一个
控制台后仍有30秒的延迟。log
已更正。但是sayHai可能会在需要的时候被呼叫。如果同步呢,因为这是为控制台设计的,所以我需要syncronus顺序删除“async”?
let i = 1
function timeout(){
    i++
    setTimeout(()=>{
        console.log("Hai")
        timeout()
    },i % 5 === 0 ? 30000 : 1000)
}
timeout()