Javascript - 在循环中每x次迭代执行一些操作

时间:2013-06-29 16:09:25

标签: javascript arrays google-maps for-loop

我正在使用Google Maps API,其每秒限制为10个请求。我希望每10个请求有一个短暂的延迟。

for (var i = 0; i < myRequests.length; i++) {
   // pause every 10 iterations 
}

我的数学并不敏锐......每当我达到10次迭代以便做某事时我怎么知道呢?

3 个答案:

答案 0 :(得分:1)

(function loop(z) {
    for (var i = 0; i < 10; i++) {
        //use myRequests[z] 
        console.log(myRequests[z]);
        z++;
        if(z===myRequests.length)
            return;
    }
    setTimeout(function(){loop(z)},1000);
})(0);

DEMO

答案 1 :(得分:1)

创建一个存储请求的数组并使用它:

    var index = -1;
    for(var i=0; i<anArray.length; i++){
        if(anArray[i]!=false){
            index = i;
            break;
        }
    }

    if(index!=-1){
        function makeCall(){
            //api calls
            anArray[index] = true;
         }
    }else{   
        setTimeout(makeCall, 1000)
    }

答案 2 :(得分:1)

循环不能等待

“等待”的唯一方法是使用超时,遗憾的是,对于这种情况,超时是异步的,因此它们在循环中是无用的,因为循环将继续运行。

相反,您需要使用递归函数。

数学部分

我们可以通过使用模运算符(%)来保存一堆逻辑,以获得当前递增计数的剩余部分除以您想要等待的分割。如果余数为0(当前计数是拆分的倍数),请等待所需的时间。

实施例

function log(out) { document.body.innerHTML += out; }

function repeat(count, split, limit, wait) {
    var args = arguments;
    if(++count <= limit) {
        log([count, '0' + count][+(count < 10)] + ', ');
        if(!(count % split) && count < limit) {
            log('wait<br>');
            setTimeout(function(){
                repeat.apply(null, args);
            }, wait);
        } else repeat.apply(null, args);
    } else log('done');
}

repeat(0, 10, 50, 1000);