函数返回函数中的方法回调数据中的变量

问题描述:

如何返回codeAddress函数的latlon变量。返回latlon不起作用,可能是因为范围,但我不确定如何使其工作。函数返回函数中的方法回调数据中的变量

function codeAddress(addr) { 
     if (geocoder) { 
      geocoder.geocode({ 'address': addr}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) { 
        var latlon = results[0].geometry.location.c+","+results[0].geometry.location.b; 
        } else { 
         alert("Geocode was not successful for the following reason: " + status); 
        } 

     }); 
    } 
    } 

您不能从codeAddress返回geocoder.geocode的结果,因为geocoder.geocode会将其结果返回给您提供的回调/闭包。你必须继续使用一个回调作为你的函数codeAddress的参数。

返回给您geocoder.geocode回调到geocoder.geocode的任何回调在您的应用程序中都没有任何意义。您必须从您提供给geocoder.geocode的回调中调用应用程序中的某个函数。

这在API的Geocoding Requests部分进行了说明。

+0

谢谢我在jquery ajax回调中遇到过这么多次,并且今天没有想到。感谢大脑的提升。 – aran 2010-04-15 14:50:55

声明一个变量外功能,将其设置在内部功能和外部返回它:

function codeAddress(addr) { 
    var returnCode = false; 
    if (geocoder) { 
    geocoder.geocode({ 'address': addr}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
     var latlon = results[0].geometry.location.c+","+results[0].geometry.location.b; 
     returnCode = true; 
     } else { 
     alert("Geocode was not successful for the following reason: " + status); 
     } 
    }); 
    } 
    return returnCode; 
} 

注意:这只会工作,如果内部函数运行的时候了!

+0

它可能无法执行,因为geocoder.geocode可能执行异步方法调用,其中返回结果的唯一方法是通过提供的回调。 – Ernelli 2010-04-14 23:08:02