Javascript 控制器的Helper函数不返回任何内容
我的地图控制器中有一个函数,可以将地址转换为google.maps.latlng,我想返回这个值,但我的函数不返回任何内容。我认为这是因为值在另一个函数中发生了变化,但我不知道如何解决这个问题Javascript 控制器的Helper函数不返回任何内容,javascript,controller,sencha-touch-2,Javascript,Controller,Sencha Touch 2,我的地图控制器中有一个函数,可以将地址转换为google.maps.latlng,我想返回这个值,但我的函数不返回任何内容。我认为这是因为值在另一个函数中发生了变化,但我不知道如何解决这个问题 addressToLatLng: function(address) { var geocoder = new google.maps.Geocoder(), lat, lng, latlng; geocoder.geocode({ 'address': address }, functi
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
},
这是因为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);
});
首先谢谢!代码运行良好,但不能解决我的问题。我想在回叫之外用板条。例如,a1=this.addressToLatLngaddress1//a1获取latlng a2=this.addressToLatLngaddress2 google.maps.geometry.Spheremic.ComputedDistanceBetweenA1的值/对象,a2@user3102211:要做到这一点,你需要一台时间机器,这样你就可以去未来,在它存在之前获得价值。当调用回调时,该值第一次对您可用,在此之前您无法获取该值。您可以从方法返回一个承诺,但这只是将回调放在您可以返回的对象中的一种方法,您仍然必须异步从承诺中获取值。那么,是否还有其他方法可以在没有lat/lng的情况下获取从您当前位置到列表中某些地址的距离,因为当这些都已经给出时,这很容易?@user3102211:你不需要其他方法,只需在回调中进行调用,然后在回调中使用下一次调用的结果。