控制器的辅助功能不会返回任何内容

时间:2013-12-14 13:06:37

标签: javascript controller sencha-touch-2

我的地图控制器中有一个函数将地址转换为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
},

1 个答案:

答案 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);
});