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以异步方式映射地理编码,但是有没有办法让它工作?
答案 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")
}
});