Javascript 等待谷歌地图地理编码器?

Javascript 等待谷歌地图地理编码器?,javascript,google-maps,Javascript,Google Maps,因此,当我调用getAddr时,我得到了未定义的消息,同时苹果会首先收到警报,然后是pear。我意识到谷歌地图的地理编码是异步的,但有没有办法做到这一点呢?你不能这样做。您对google的geocoder进行了异步调用,这意味着您将无法让getAddr返回结果。相反,您应该这样做: geo = function(options){ geocoder.geocode( options, function(results, status) { if (status == go

因此,当我调用getAddr时,我得到了未定义的消息,同时苹果会首先收到警报,然后是pear。我意识到谷歌地图的地理编码是异步的,但有没有办法做到这一点呢?

你不能这样做。您对google的geocoder进行了异步调用,这意味着您将无法让getAddr返回结果。相反,您应该这样做:

geo = function(options){
    geocoder.geocode( options, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var x = results;
            alert('pear');
            return x;
        } else {
            return -1;
            }
        });
    }

getAddr = function(addr){
    if(typeof addr != 'undefined' && addr != null) {
        var blah = geo({ address: addr, });
                    alert('apple');
                    return blah;
    }
    return -1;
}
然后在代码中使用这样的代码:

getAddr = function(addr, f){
    if(typeof addr != 'undefined' && addr != null) {
        geocoder.geocode( { address: addr, }, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            f(results);
          }
        });
    }
    return -1;
}
getAddr = function(addr, f){
    if(typeof addr != 'undefined' && addr != null) {
        geocoder.geocode( { address: addr, }, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            f('ok', results);
          } else {
            f('error', null);
          }
        });
    } else {
      f('error', null);
    }
}
编辑:如果需要,还可以添加更多状态验证:

getAddr(addr, function(res) {
  // blah blah, whatever you would do with 
  // what was returned from getAddr previously
  // you just use res instead
  // For example:
  alert(res);
});
你可以这样使用它:

getAddr = function(addr, f){
    if(typeof addr != 'undefined' && addr != null) {
        geocoder.geocode( { address: addr, }, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            f(results);
          }
        });
    }
    return -1;
}
getAddr = function(addr, f){
    if(typeof addr != 'undefined' && addr != null) {
        geocoder.geocode( { address: addr, }, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            f('ok', results);
          } else {
            f('error', null);
          }
        });
    } else {
      f('error', null);
    }
}