0

ループを 1 秒ごとに遅らせる必要があります。ループが何回繰り返されたかをカウントする必要があります。ループの長さを 3 で割り切れたら、1 秒間停止してからループを続行します。

var callsPerSecond = 500;
var len = 1900;
var delay = 1500;
var timeout;

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

myLoop();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="log"></ul>

したがって、1900 は 500 で 3 回割り切れるので、1 秒遅れてログに 1900 foo が 3 回表示されるはずです。

どこが間違っていますか?:(

4

2 に答える 2

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

i が callsPersecond で割り切れる場合、1000ms 後に再度 myLoop 関数を呼び出し、カウントを続けます。

于 2013-10-02T09:15:12.563 に答える
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();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="log"></ul>

于 2013-10-02T09:20:34.417 に答える