2013-10-02 4 views
0

Мне нужно задержать цикл каждую секунду, мне нужно подсчитать, сколько раз цикл повторяется, как только он набирает число из 3 по сравнению с длиной, пауза на секунду, а затем продолжайте петля.Задержка цикла на 1 секунду

DEMO: http://jsfiddle.net/eR6We/1/

var callsPerSecond = 500; 
var len = 1900; 
var delay = 1000; 

var i = 1; // set your counter to 1 

function myLoop() { // create a loop function 
    setTimeout(function() { // call a 3s setTimeout when the loop is called 
     $('#log').append('<li>called</li>'); // your code here 
     i++; // increment the counter 
     if (i < ((len - (i % callsPerSecond))/callsPerSecond)) { // if the counter < 10, call the loop function 
      myLoop(); // .. again which will trigger another 
     } // .. setTimeout() 
     console.log('foo' + i); 
    }, 500) 
} 

myLoop(); 

Так что я должен получить 1900 FOOS в моем журнале, с задержкой в ​​секунду, в 3 раза, потому что 1900 является divisable 500 3 раза.

Куда я иду не так? :(

ответ

1

Этот код делает то, что вы хотите:.

var callsPerSecond = 500; 
var len = 1900; 
var delay = 1000; 

function myLoop (i) 
{ 
    while(i < len) 
    { 
     i++; 
     console.log('foo' + i); 
     if(i % callsPerSecond == 0) 
     { 
      setTimeout(function() { myLoop(i); }, delay); 
      break; 
     } 
    } 
}; 

myLoop(0); 

Когда я делится на callsPersecond, она вызывает функцию myLoop снова после 1000 мс и продолжает считать

1

Если я понял ваш вопрос, его Ваше решение

var callsPerSecond = 500; 
var len = 1900; 
var delay = 1000; 
var i = 1; // set your counter to 1 

function myLoop() { // create a loop function 
    setTimeout(function() { // call a 3s setTimeout when the loop is called 

     if (i < ((len - (i % callsPerSecond))/callsPerSecond)) { // if the counter < 10, call the loop function 
      $('#log').append('<li>called</li>'); // your code here 

     } // .. setTimeout() 

     myLoop(); // .. again which will trigger another 
     console.log('foo' + i); 
     i++; // increment the counter 
    }, delay) 
} 

myLoop(); 
+0

Спасибо за ваш ответ, он действительно работает, однако Руудс отвечает немного приятнее на глазах :) –

Смежные вопросы