在Javascript中定时循环

时间:2015-06-03 13:18:35

标签: javascript

我甚至不知道如何开始这个:我需要一个执行function的for循环(比如一个简单的console.log()),每次执行之间都有一个定时延迟。我一直试图用setTimeout()来做它,它永远不会奏效。如果我从setTimeout调用具有循环的函数,它将无法工作。理想情况下,我希望我的for循环打印x次,每次打印之间延迟几秒钟。任何想法如何工作?我尝试过这样的事情:

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

8 个答案:

答案 0 :(得分:5)

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

var counter = 0;
var limit = 10;
var myVar = setInterval(function(){ 
    if (counter > limit)
    {
        clearInterval(myVar);
    }
    counter++;
    console.log("test"); 
}, 1000);

答案 1 :(得分:2)

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());
}

答案 2 :(得分:1)

您可以使用async模块。

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

这样,计数将每秒打印

答案 3 :(得分:1)

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

http://jsfiddle.net/sq4v0kbf/

答案 4 :(得分:0)

使用setInterval()代替setTimeout()。参数是一样的:

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

答案 5 :(得分:0)

这是另一种方法。使用包装函数。

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

}

答案 6 :(得分:0)

您可以使用要运行的迭代次数创建一种延迟循环函数。像这样:

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);

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

请参阅demo

答案 7 :(得分:0)

这是我认为比setInterval

更简单(and doesn't have the fallbacks of

    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 />';
});