Javascript 每五次迭代后暂停循环一秒钟

Javascript 每五次迭代后暂停循环一秒钟,javascript,loops,timeout,sleep,wait,Javascript,Loops,Timeout,Sleep,Wait,对于我的程序,我必须发出100个JSON请求。不幸的是,每秒只允许5次呼叫。由于我使用for循环发出所有JSON请求(这是最好的方法),因此我必须在每5次调用后暂停循环1秒 function Hello() { $("#randomdiv").show(); for (var i=0; i<100; i++) { if (i%5 == 0 && i>0) { sleep(1000); } $

对于我的程序,我必须发出100个JSON请求。不幸的是,每秒只允许5次呼叫。由于我使用for循环发出所有JSON请求(这是最好的方法),因此我必须在每5次调用后暂停循环1秒

function Hello() {
   $("#randomdiv").show();
   for (var i=0; i<100; i++) {
       if (i%5 == 0 && i>0) {
         sleep(1000);
       }   
       $.getJSON(JSONreq, function(data) {Just a JSON request, nothing special}) 
    };  
};
函数Hello(){ $(“#randomdiv”).show(); 对于(var i=0;i0){ 睡眠(1000); } $.getJSON(JSONreq,函数(数据){只是一个JSON请求,没有什么特别的}) }; };
sleep(1000)
导致整个页面冻结约20秒,并防止在JSON请求发出之前出现
#randomdiv

我能做些什么来解决这个问题?
非常感谢:)

您可以在关闭时使用超时:

function Hello() {
   $("#randomdiv").show();
   var loop = getLoop();
   loop();
};

function getLoop() {
    var count = 0;
    var func = function() {
        for (var i = 0; i < 5; ++i) {
            $.getJSON(JSONreq, function(data) {Just a JSON request, nothing special}) 
        }
        if (++count < 20) {
            setTimeout(func, 1000);
        }
    }
    return func;
}
函数Hello(){ $(“#randomdiv”).show(); var loop=getLoop(); loop(); }; 函数getLoop(){ var计数=0; var func=函数(){ 对于(变量i=0;i<5;++i){ $.getJSON(JSONreq,函数(数据){只是一个JSON请求,没有什么特别的}) } 如果(++计数<20){ 设置超时(func,1000); } } 返回函数; }
您可以执行以下操作:

function Hello() {
    $("#randomdiv").show();
    for (var i = 0; i < 100; i++) {
        var interval = 0;
        if (i % 5 == 0 && i > 0) {
            interval = 1000;
        }
        setTimeout(function () {
            getJson()
        }, interval);
    };
}

function getJson() {
    $.getJSON(JSONreq, function (data) {
        Just a JSON request, nothing special
    });
}
函数Hello(){ $(“#randomdiv”).show(); 对于(变量i=0;i<100;i++){ var区间=0; 如果(i%5==0&&i>0){ 间隔=1000; } setTimeout(函数(){ getJson() },间隔); }; } 函数getJson(){ $.getJSON(JSONreq,函数(数据){ 只是一个JSON请求,没什么特别的 }); }
使用计时器:@Alfie我不知道如何每五次迭代使用一次计时器。这两个计时器中哪一个更适合我?您可能需要
setInterval()
,因为它会继续循环直到您停止它。如果希望每5次执行一次代码,可以使用一个全局变量整数,每个循环递增1,然后检查它是否=4,如果是,则执行代码并将数字重置为0,否则,只需在数字上加1,然后退出functionAn替代实现:如果您将问题表述为每次迭代需要暂停循环0.2秒,您可能会发现这是一个更容易解决的问题。@user814064哦,伙计,我不敢相信我没有想到这一点。那容易多了!感谢Doesn
setTimeout
是否使函数异步运行?所以如果你运行这个,我认为它首先会非常快地通过
for
循环100次,并设置超时,然后一秒钟后它们会同时运行。这是假设以
0
的延迟运行
setTimeout
没有任何作用,imo可能不是这样。您可能会发现它会立即运行80次
getJson()
,然后在一秒钟后运行20次。