TSk*_*ora 0 javascript google-maps google-maps-api-3
我在谷歌地图代码中处理这个问题,但它实际上是一个架构问题.在某些时候因为这么多的请求谷歌地图限制了响应,并且在那一点上我想要延迟做另一个请求,但是当我再次调用function2时它说"数组未定义".
function1() {
var array = JSON.parse(xmlhttp.responseText);
for (i; i < length; < i++) {
function2(array[i].one, array[i].two);
}
function3() {
//render directions
}
function2(start, end) {
directionsService.route({
origin: start,
destination: end,
},
function (result, status) {
if (status == google.maps.DirectionsStatus.OK)
function3(result);
else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT)
var functionStr = "function2(array[i].one" + ',' + "array[i].two)";
setTimeout(functionStr, 5000);
});
}
}
Run Code Online (Sandbox Code Playgroud)
那是因为当你使用一串代码时,setTimeout()它会在全局范围内执行,而这个范围是不知道的array.全球范围也不知道i; 即使它确实如此,价值i已经不再有效了.
如果将函数代码包装在匿名函数中,它应该可以工作,如下所示:
setTimeout(function() {
function2(start, end);
}, 5000);
Run Code Online (Sandbox Code Playgroud)
请注意,你可以简单地重复使用start和end在这里,因为这些值已被保护,以防止在变化i的变量.
顺便说一句,你可以考虑序列化你的所有谷歌请求,即一个接一个请求,以防止这些费率问题.
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |