如何设置循环执行的延迟
for(i=0; i<=10;i++){
var s=i;//This line should execute for every 2 secs only
}
如何在java脚本中给出循环延迟....
我不想像下面那样..我想不使用setTimeout ...
for(i=0; i<=10;i++){
setTimeout("setvalue()",2000); //This alert should display for every 2 secs only
}
function setvalue()
{
var s=i;
}
请帮帮我......
答案 0 :(得分:9)
使用setInterval()
var i = 0;
var interval = setInterval(function(){
setValue();
i += 1;
if(i == 10)
clearInterval(interval);
}, 2000);
在没有冻结整个浏览器的情况下,无法睡眠 2秒。 Javascript是单线程的。
答案 1 :(得分:3)
你做不到。 JS在单个线程中运行,任何延迟该线程的尝试都将冻结整个页面。使用setTimeout是您唯一的选择。
编辑:或setInterval;无论哪种方式,都没有非毛茸茸的方式表达“在这里停止执行x毫秒。”
答案 2 :(得分:2)
使用setTimeout
是不可避免的,但是,递归函数可能是更好的解决方案:
var i=0;
function recurs() {
i = s;
i++;
if (i <= 10) recurs();
}
recurs();
答案 3 :(得分:1)
正如其他人所说的那样,setTimeout
可以很好地用于处理这些场景,setInterval
也可以使用,但有些人不鼓励。
您甚至可以递归调用内置setTimeout的函数,如setInterval的MDN文档中所述。那里的标题提到了“危险的用法”,但他们解决危险的方法是下面的代码块。
它提到要每隔x秒(或毫秒)执行一个循环,那么你可以执行以下操作,并确保这些函数一次只执行一个和顺序:
(function loop(){
setTimeout(function(){
// logic here
// recurse
loop();
}, 1000); // repeat loop 1 second after this branch has completed
})();
如果您希望它只执行有限次数,那么您可以在循环外创建一个变量,并且只有在计数小于您想要执行的次数时才递归执行。比如这个:
var count = 0;
(function loop() {
setTimeout(function() {
// logic
count++;
if (count < 10) {
loop();
}
}, 1000);
})();