我已经苦战了一段时间。 我刚开始学习JavaScript,并一直以为我所编写的代码是异步运行的。以下是一个通用示例:
我在函数a中运行一些代码。 然后函数A调用函数B,需要将一个变量返回给A,以便A可以在其后续操作中使用它。 但是当A调用B时,它仍然继续运行自己的代码,不等待其返回值,而且B并没有足够快,以至于在A到达需要使用返回值的时候,我会得到一个未定义变量类型错误。
我解决这个问题的方法是让函数A调用函数B,然后调用函数C执行后续操作,这与A将使用返回值的方式不同... ... 通过调用来串行化代码,虽然有点繁琐...
以下是一个实际代码出现此问题的示例:
function initialize() {
//Geocode Address to obtin Lat and Long coordinates for the starting point of our map
geocoder = new google.maps.Geocoder();
var results = geocode(geocoder);
makeMap(results[0].geometry.location.lat(), results[0].geometry.location.lng());
}
function geocode(geocoder) {
//do geocoding here...
var address = "3630 University Street, Montreal, QC, Canada";
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
return results;
}
else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
function makeMap(lat, long) {
// alert(lat); for debuging
var mapOptions = {
center: new google.maps.LatLng(lat, long),
zoom: 17,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"),
mapOptions);
}
注意: 在我的html中,initialize将会被body onload="initialize()"调用。
因此,问题在于makeMap需要由Geocode函数获取的纬度和经度值,但是我在控制台中收到一个指出 results 未定义的错误。发生了什么?我来自Java,所以对JS中的数据流如何发生有些困惑!这将是今后宝贵的课程!
关于一个相关的问题: 我应该如何跨外部脚本拆分我的函数?什么是良好实践?我的所有功能是否应该挤进一个外部.js文件中,还是应该将类似的功能分组在一起?