0

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

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

我的数学不是很敏锐……我怎么知道何时达到 10 次迭代才能做某事?

4

3 回答 3

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

演示

于 2013-06-29T16:16:23.210 回答
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)
    }
于 2013-06-29T16:26:39.003 回答
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);

于 2015-06-01T16:34:29.367 回答