ループを 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 回表示されるはずです。
どこが間違っていますか?:(