我的地图控制器中有一个函数将地址转换为google.maps.latlng并且我想返回此值,但我的函数不会返回任何内容。我认为这是因为值在另一个函数内部发生了变化,但我无法弄清楚如何解决这个问题。
addressToLatLng: function(address) {
var geocoder = new google.maps.Geocoder(), lat, lng, latlng;
geocoder.geocode({ 'address': address }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
lat = results[0].geometry.location.lat();
lng = results[0].geometry.location.lng();
latlng = new google.maps.LatLng(lat, lng);
console.log(latlng); // will give me the object in the log
}
});
return latlng; // nothing happens
},
答案 0 :(得分:0)
那是因为geocode
调用是异步的,所以你试图在它存在之前返回该值。
您可以使用回调让来电者在到达时获取值:
addressToLatLng: function(address, callback) {
var geocoder = new google.maps.Geocoder(), lat, lng, latlng;
geocoder.geocode({ 'address': address }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
lat = results[0].geometry.location.lat();
lng = results[0].geometry.location.lng();
latlng = new google.maps.LatLng(lat, lng);
callback(latlng);
}
});
},
用法:
yourController.addressToLatLng(address, function(latlng){
console.log(latlng);
});