我在javascript中多次调用google服务。
我想停止执行更多javascript,直到我收到所有回复。
<script type="text/javascript">
var schools =
[
'Abelsvej 98, 4100, Ringsted',
'Almstoftevej 71, 4100, Ringsted',
'Balstrupvej 35, 4100, Ringsted',
'Ejlstrupvej 101, 4100, Ringsted',
'Ejlstrupvej 101 C 101, 4100, Ringsted',
'Ejlstrupvej 90 90, 4100, Ringsted',
'Haraldsvej 7 7, 4100, Ringsted',
'Løngangen 43 65, 4100, Ringsted',
'Vetterslev Bygade 21 21, 4100, Ringsted',
'Østergade 25, Høm 25, 4100, Ringsted',
'Østergade 3, høm 3, 4100, Ringsted'
];
for (var r = 0; r < schools.length; r++) {
(function (r) {
var address = schools[r][1];
var geocoder = new google.maps.Geocoder();
setTimeout(function () {
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var location = results[0].geometry.location;
schoolsArray[r] = location.lat() + ', ' + location.lng();
}
});
}
, 1000 * (r + 1));
}(r));
// other javascript stuff
</script>
我希望在所有回复到来之前,javascript不应该更进一步。
答案 0 :(得分:0)
您在这里遇到的是异步请求和同步JavaScript方法之间的区别。
向Google发出的请求可能需要一段时间,因此您会发现回调是geocode()
方法中的第二个参数。
执行此操作的最佳方法是计算您已经返回的响应数量,并且在回调方法中,您可以添加一个函数,然后运行您要运行的其余JavaScript。你得到了每一个回复。
没有办法停止所有JavaScript运行,你只能告诉一些代码在获得每个地理编码响应时运行。
我不确定为什么你的代码中也有setTimeout()
。
<script type="text/javascript">
var schools =
[
'Abelsvej 98, 4100, Ringsted',
'Almstoftevej 71, 4100, Ringsted',
'Balstrupvej 35, 4100, Ringsted',
'Ejlstrupvej 101, 4100, Ringsted',
'Ejlstrupvej 101 C 101, 4100, Ringsted',
'Ejlstrupvej 90 90, 4100, Ringsted',
'Haraldsvej 7 7, 4100, Ringsted',
'Løngangen 43 65, 4100, Ringsted',
'Vetterslev Bygade 21 21, 4100, Ringsted',
'Østergade 25, Høm 25, 4100, Ringsted',
'Østergade 3, høm 3, 4100, Ringsted'
];
var count = 0;
for (var r = 0; r < schools.length; r++) {
(function (r) {
var address = schools[r][1];
var geocoder = new google.maps.Geocoder();
setTimeout(function () {
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var location = results[0].geometry.location;
schoolsArray[r] = location.lat() + ', ' + location.lng();
count++;
if(count == schools.length){
doMoreJS();
}
}
});
}
, 1000 * (r + 1));
}(r));
}
function doMoreJS(){
// Do more JS
}
</script>