停止javascript,直到服务的所有响应到达
我在javascript中多次调用google服务 在得到所有响应之前,我想停止进一步执行javascript停止javascript,直到服务的所有响应到达,javascript,google-api,Javascript,Google Api,我在javascript中多次调用google服务 在得到所有响应之前,我想停止进一步执行javascript <script type="text/javascript"> var schools = [ 'Abelsvej 98, 4100, Ringsted', 'Almstoftevej 71, 4100, Ringsted', 'Balstrupvej 35, 4100, Ringsted',
<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>
var学校=
[
“Abelsvej 984100,Ringsted”,
“Almstoftevej 714100,林斯特德”,
“Balstrupvej 35,4100,Ringsted”,
“EJSTRUPVEJ 101、4100、Ringsted”,
“EJSTRUPVEJ 101 C 101、4100、Ringsted”,
“EJSTRUPVEJ 90,4100,林斯特德”,
“Haraldsvej 7,4100,Ringsted”,
“Løngen 43654100,林斯特德”,
“Vetterslev Bygade 21 21 4100,林斯特德”,
Østergade 25,Høm 25,4100,林斯特德,
Østergade 3,høm 3,4100,林斯特德'
];
for(var r=0;r
我希望在所有响应到达之前,javascript不应再进一步。您在这里遇到的是异步请求和同步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>
var学校=
[
“Abelsvej 984100,Ringsted”,
“Almstoftevej 714100,林斯特德”,
“Balstrupvej 35,4100,Ringsted”,
“EJSTRUPVEJ 101、4100、Ringsted”,
“EJSTRUPVEJ 101 C 101、4100、Ringsted”,
“EJSTRUPVEJ 90,4100,林斯特德”,
“Haraldsvej 7,4100,Ringsted”,
“Løngen 43654100,林斯特德”,
“Vetterslev Bygade 21 21 4100,林斯特德”,
Østergade 25,Høm 25,4100,林斯特德,
Østergade 3,høm 3,4100,林斯特德'
];
var计数=0;
for(var r=0;r
您并不想停止JavaScript。这将冻结UI,导致浏览器向用户抱怨脚本已停止响应,并询问用户是否应完全关闭该页面的JavaScript。但它仍会转到下一个脚本并执行setTimeout()是针对谷歌服务的,否则您会超过\u QUERY\u LIMIT错误。您还可以为我的代码提供建议。添加了一些代码。它会检查返回项目的数量是否与学校的长度相同。如果是这样,它将运行doMoreJS()
在您应该运行额外JS的位置。