繁体   English   中英

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

[英]Waiting for google maps geocoder?

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以异步方式映射地理编码,但有没有办法让这个工作?

你将无法这样做。 您对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")
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM