我正在使用Google Maps API,其每秒限制为10个请求。我希望每10个请求有一个短暂的延迟。
for (var i = 0; i < myRequests.length; i++) {
// pause every 10 iterations
}
我的数学并不敏锐......每当我达到10次迭代以便做某事时我怎么知道呢?
答案 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);
答案 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);