如何在JavaScript循环中添加延迟?

501

我想在一个while循环内添加延迟/休眠:

我尝试像这样实现:

alert('hi');

for(var start = 1; start < 10; start++) {
  setTimeout(function () {
    alert('hello');
  }, 3000);
}

只有第一种情况是正确的:显示 alert('hi') 后,它将等待3秒钟,然后显示 alert('hello'),但随后 alert('hello') 将不断地重复显示。

我希望的是,在显示 alert('hi') 之后3秒钟后显示 alert('hello'),然后再等待3秒钟显示第二次 alert('hello'),以此类推。


for(var i=0; i < 5; i++){ delayLoop(i) }; function delayLoop(i){ setTimeout(function(){ console.log('每隔1秒打印一次', (i*1000)) } } - mhndlsz
const setTimeOutFn = async() => { for (var start = 0; start < 3; start++) { await new Promise(async(res, rej) => { setTimeout(() => { console.log('你好', start); res() }, 3000); }) } } - Bilal Khursheed
在每个循环中设置不同值的超时可能不是一个好主意。以下是一种使用Promise(async / await)实际上通过无限期挂起代码执行的无聊单行程序:https://dev59.com/DHA65IYBdhLWcg3w4C0L#73588338 - marko-36
33个回答

-1

你来做:

console.log('hi')
let start = 1
setTimeout(function(){
  let interval = setInterval(function(){
    if(start == 10) clearInterval(interval)
    start++
    console.log('hello')
  }, 3000)
}, 3000)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


最好使用控制台日志而不是警告框,关闭警告框半分钟并不好玩 ;) - Hendry
是的,我明白了!但请求是警报... huz - Nguyen Ba Danh - FAIC HN
为什么要导入jQuery? - Elias Soares
抱歉...这不必要..呵呵。我不知道发布什么内容...这是第一次。 - Nguyen Ba Danh - FAIC HN
另一个回答是预设间隔,而不考虑任务“alert”,这并没有回答问题。 - niry

-1

<!DOCTYPE html>
<html>
<body>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
function myFunction() {
    for(var i=0; i<5; i++) {
     var sno = i+1;
        (function myLoop (i) {          
             setTimeout(function () {   
              alert(i); // Do your function here 
             }, 1000*i);
        })(sno);
    }
}
</script>

</body>
</html>


2
请始终为您的代码片段提供至少简要描述,以确保其他人确信您_解决了_问题。 - Hexfire
2
仅编写代码的答案是不鼓励的,因为它们并不为未来读者提供太多信息,请在您编写的代码上提供一些解释。 - WhatsThePoint

-2

简单实现方式是在循环运行时每两秒钟显示一段文本。

for (var i = 0; i < foo.length; i++) {
   setInterval(function(){ 
     console.log("I will appear every 2 seconds"); 
   }, 2000);
  break;
};

这行代码不起作用。如果你在循环的第一次迭代中无条件地使用 break,那么循环的意义何在?可以用 if (foo.length >= 0) {...} 替换它,但这样就无法实际满足问题的要求了。 - ggorlen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接