只是想知道是否有人可以帮助我使用Javascript原则。我猜这是非常核心的,如果我想传递一个函数作为参数。我对Javascript有一点了解,但我承认它的细微之处可能还不够。
因此,调用codeAddress,然后到达我的第一个警报(HERE2),代码传回我的showOnMap函数,然后到达我的第二个警报(HERE3)。为什么我的HERE3警报会在我的HERE2警报之前显示?有什么我可以做的告诉Javascript等待吗?
提前致谢
function showOnMap() {
var inputStart = document.getElementById('CurrentHitch_StartDescription').value;
var inputEnd = document.getElementById('CurrentHitch_EndDescription').value;
codeAddress(inputStart, true); //HERE1*************
codeAddress(inputEnd, false);
var bounds2 = new google.maps.LatLngBounds(this.markerStart.getPosition());
bounds2.extend(this.markerEnd.getPosition());
map.fitBounds(bounds2);
alert('showOnMap'); //HERE3*************
}
function codeAddress(address, isStart) {
geocoder.geocode({ 'address': address }, function (results, status) {
alert('codeAddress'); //HERE2*************
if (status == google.maps.GeocoderStatus.OK) {
if (isStart) {
markerStart.setPosition(results[0].geometry.location);
}
else {
markerEnd.setPosition(results[0].geometry.location);
}
} else {
alert("Sorry, couldn't find your destination: " + status);
}
});
return;
}
答案 0 :(得分:2)
这是因为geocode
异步发生(非 - 阻止代码,这意味着将来某个时候,我会在完成后通知您)。它可能可以告诉Google的api同步工作(作为阻止代码),但是你可能最好放置依赖于geocode
回调结果的代码。 / p>
答案 1 :(得分:0)
欢迎来到ajax
世界......
geocode
是由google提供的ajax服务。
您发送异步请求,您不是在等待它返回,继续使用代码,“第三个”警报触发,异步请求返回,您触发“第二个”警报
想想这段代码:
alert('1');
setTimeout(function(){
alert('2');
}, 1000); // fire the function after one second.
alert('3');
输出顺序:
1,3,2