Javascript中的循环超时

Timed for loop in Javascript

本文关键字:超时 循环 Javascript      更新时间:2023-09-26

我甚至不知道如何开始:我需要一个for循环来执行function(比如简单的console.log()(,每次执行之间都有定时延迟。我一直在尝试用setTimeout()来做这件事,但它从来都不起作用。如果我从setTimeout调用具有循环的函数,它将不起作用。理想情况下,我希望我的for循环打印x次内容,每次打印之间有几秒钟的延迟。有什么想法吗?我试过这样的东西:

function printStuff(){
for(var i=0;i<5;i++){
console.log(i);
}
};
setTimeout(printStuff(),1000);

对我来说,你应该执行setInterval,在里面你应该增加计数器。当计数器达到极限时,只需清除间隔即可。

var counter = 0;
var limit = 10;
var myVar = setInterval(function(){ 
    if (counter > limit)
    {
        clearInterval(myVar);
    }
    counter++;
    console.log("test"); 
}, 1000);
init();
function init() {
  setTimeout(init, 2*1000); // wait 2 sec then call init again
  console.log(Date());
}

或者使用setInterval:

// Call init after 2 sec and repeat calling it every 2. sec
setInterval(init, 2*1000);
function init() {
  console.log(Date());
}

您可以使用异步模块。

var count = 0;
async.whilst(
    function () { return count < 5; },
    function (callback) {
        count++;
        console.log(count);
        setTimeout(callback, 1000);
    },
    function (err) {
        // 5 seconds have passed
    }
); 

通过这种方式,计数将每秒打印一次

var i = 0;
function timeout(){
    setTimeout(log, 1000);
} 
function log(){
    console.log(i++);
    timeout();
}
log();

http://jsfiddle.net/sq4v0kbf/

使用setInterval()而不是setTimeout()。参数完全相同:

setInterval(function () {
  // your utility code goes here
}, 2000);

这里还有一种方法。使用包装器函数。

var time = 2000;
for (var i = 0; i < 10; i++) {
    (function (i) {
        setTimeout(function () {
            console.log(i);
        }, time);
    })(i);
    time+=2000;
}

您可以创建一种具有要运行的迭代次数/次数的延迟循环函数。类似这样的东西:

var delayedLoop = function (n, milliseconds) {                                       
    var iteration = function (n) {                                              
        if (n > 0) {
            n--;
            console.log(n);                                             
            setTimeout(function () {                                               
                iteration(n)                                                          
            }, milliseconds);                                                              
        }                                                                        
    };                                                                         
    iteration(n);                                                               
}
delayedLoop(4, 1000);

您甚至可以扩展这个想法,甚至每次都传递一个要执行的函数。

请参阅演示。

以下是我认为比setInterval 更简单的(并且没有的缺点(

    var limit = 10,
      counter = 0,
      delay = 1000;
    function doIt() {
      document.body.innerHTML += 'Hit counter: ' + (counter++) + '<br />';
      if (counter < limit) {
        setTimeout(doIt, delay);
      }
    }
    doIt();

你可以把它推广到

function runTimedLoop(delay, howMany, callback) {
  var index = 0;
  function iteration() {
    callback(index++);
    if (index < howMany) {
      setTimeout(iteration, delay);
    }
  }
  iteration();
}
runTimedLoop(1000, 10, function(index) {
  document.body.innerHTML += 'Hit counter: ' + (index++) + '<br />';
});