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

时间:2013-08-25 23:59:38

标签: 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);
       }   
       $.getJSON(JSONreq, function(data) {Just a JSON request, nothing special}) 
    };  
};

sleep(1000)导致整个页面冻结大约20秒,并阻止在发出JSON请求之前出现#randomdiv

我该怎么做才能解决这个问题? 非常感谢:)

2 个答案:

答案 0 :(得分:0)

您可以使用带闭包的超时:

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

答案 1 :(得分:-1)

您可以这样做:

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