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);
}
});
}