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

时间:2012-02-19 00:33:31

标签: javascript google-maps

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时,我得到了未定义的信息,首先会提示苹果,然后是梨。我意识到google以异步方式映射地理编码,但是有没有办法让它工作?

1 个答案:

答案 0 :(得分:10)

你将无法这样做。您对Google的地理编码器进行了异步调用,这意味着您无法让getAddr返回结果。相反,你应该做这样的事情:

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(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('ok', results);
          } else {
            f('error', null);
          }
        });
    } else {
      f('error', null);
    }
}

你可以这样使用它:

getAddr(addr, function(status, res) {
  // blah blah, whatever you would do with 
  // what was returned from getAddr previously
  // you just use res instead
  // For example:
  if (status == 'ok') {
    alert(res);
  } else {
    alert("Error")
  }
});
相关问题