Невозможно вернуть значение из асинхронной функции. Не пытайтесь.
Вместо этого используйте обратный вызов.
function setLocationOnMap(locs) {
alert(locs.lat()); // works now!
var myOptions = {
zoom: 4,
center: new google.maps.LatLng(41, -87),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);
}
function initialize() {
var address = "Chicago IL";
getLatLong(address, setLocationOnMap);
}
function getLatLong(address, callback){
var geo = new google.maps.Geocoder;
geo.geocode({'address':address},function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
// processing...
locs = results[0].geometry.location;
callback(locs);
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
Вы должны понимать, что асинхронные вызовы функций, такие как geo.geocode()
, возвращаются немедленно, т. Е. До того, как результат будет готов. Вот почему вы не можете использовать return
для получения значения от них - у них его пока нет.
Как только результат (чаще всего HTTP-запрос) готов, асинхронная функция полагается на функцию обратного вызова для его обработки. Вы должны выполнить всю вашу дальнейшую обработку в этой функции обратного вызова, либо напрямую, либо путем вызова другой функции.