Javascript 谷歌地理编码Api

Javascript 谷歌地理编码Api,javascript,google-maps,Javascript,Google Maps,有人能给我解释一下以下行为吗 function getLatLong() { var geocoder = new google.maps.Geocoder(); var result = ""; geocoder.geocode ( { 'address': "London", 'region': 'uk' }, function(results, status) { if (status == google.m

有人能给我解释一下以下行为吗

function getLatLong() 
    {
        var geocoder = new google.maps.Geocoder();
        var result = "";
        geocoder.geocode ( { 'address': "London", 'region': 'uk' }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
            result = results[0].geometry.location;
            alert('Im called second');
            } else {
               alert("Geocode was not successful for the following reason: " + status);
            }
        });

        alert('Im called first');  
        return result;
    }
如何在第一个警报之前调用第二个警报消息?我遇到了一个问题,即我试图返回指定变量“result”的值,但它仍以空字符串的形式返回,即使它确实从结果[0].geometry.location中获得了一个值。我有一种可怕的感觉,我在这里遗漏了一个非常明显的东西://p>
geocoder.geocode()
是一个异步方法,这意味着它会立即返回,而不会阻塞,但只在geocodeing调用(可能是对谷歌的geocodeing服务)完成后才运行指定的函数

发生的情况是,
警报('Im called first')
调用在另一个调用完成之前被调用,很可能是因为地理编码调用必须通过internet进行。这两个调用的顺序可能会有所不同,这完全取决于地理编码完成所需的时间

要解决此问题,您不能从该函数返回结果。相反,您需要提供一个在地理编码完成时调用的函数作为回调函数,以便使用现在填充的结果

e、 g


另一个原因是调用geocoder.geocode使用回调传递结果。对geocoder.geocode的调用只持续足够长的时间,以向geocoder服务发送请求,然后执行继续到下一行(非回调),即“Im called first”警报。回调中的所有代码都“保存以备将来使用”,并在收到geocoder响应时调用


您必须相应地编写代码。您不必返回原始函数调用的结果,而必须在回调中获取结果并从那里继续处理。这会使javascript控制流有点难以遵循。

感谢您的回复。我现在只是在第一次回调中对处理进行编码,效果非常好!将像上面的答案所示,为清晰起见,对回调进行链接。
function getLatLong(completeCallback) 
{
    var geocoder = new google.maps.Geocoder();
    geocoder.geocode ( { 'address': "London", 'region': 'uk' }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var result = results[0].geometry.location;
            completeCallback(result);
        } else {
            alert("Geocode was not successful for the following reason: " + status);
        }
    });
}