Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 控制器的Helper函数不返回任何内容_Javascript_Controller_Sencha Touch 2 - Fatal编程技术网

Javascript 控制器的Helper函数不返回任何内容

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

我的地图控制器中有一个函数,可以将地址转换为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
},
这是因为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:你不需要其他方法,只需在回调中进行调用,然后在回调中使用下一次调用的结果。