Google Places API中每秒有一个查询限制,因此我需要放慢发送请求的循环速度:
function callback(results, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
alert(status);
return;
}
for (var i = 0, result; result = results[i]; i++) {
RequestInfo(result);
}
}
知道我该怎么做吗?我有点新手。
答案 0 :(得分:4)
递归解决方案,
function requestInfoWrapper(results, i) {
i = i + 1;
if (i >= results.length) {return};
requestInfo(results[i]);
setTimeout(function() {requestInfoWrapper(results, i);}, 1000);
}
测试它的一些示例代码,
var results = ["test 1", "test 2", "test 3"];
function requestInfo(str) {console.log(str);}
requestInfoWrapper(results, -1);
还与您的代码集成,
function callback(results, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
alert(status);
return;
}
requestInfoWrapper(results, -1);
}
答案 1 :(得分:2)
for (var i = 0, result; result = results[i]; i++){
(function(result){
setTimeout(function(){
RequestInfo(result);
}, 1e3 * i);
})(result);
}
您可以使用setTimeout
并将其分隔开以执行每1 second * n
(其中n
是当前的迭代编号)。
而且,对于更多的答案,JavaScript没有“睡眠”方法(你也不想要它;它是单线程的,并且在等待时会占用其他任何东西)。
答案 2 :(得分:1)
您可以使用setTimeout以递归方式调用该函数。
var i = 0;
function callback(results, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
alert(status);
return;
}
setTimeout(function() {
i++;
if (i < results.length) {
RequestInfo(results[i]);
callback(results, status);
}
}, 1000);
}