我创建了一个返回刻度和经度的函数
问题是在alert('outside:')
之前触发geocoder.geocode
。
查看this similar example,此功能应该有效。
function getLatLng(geocoder, adr) {
var latLng = '';
geocoder.geocode({
address: adr}, function(results, status){
if (status == google.maps.GeocoderStatus.OK && results.length) {
latLng = results[0].geometry.location;
alert('inside: ' + latLng); // This works
}
}
);
alert('outside: ' + latLng); // This shows NULL
return latLng;
}
那么我需要做什么才能返回latlng值?
答案 0 :(得分:5)
你会看到这种模式在JavaScript中用于异步操作 - geocode()
的第二个参数是一个回调函数,当潜在的昂贵和长期的地理编码操作完成时,它会被调用。如果调用是同步的,它会锁定您的网页和任何其他JavaScript代码,直到它返回。
使用异步函数的一个小挫折是它们立即返回,因此您无法使用return
返回值;就像你在地理编码示例中发现的那样 - 对geocode()
的调用立即返回而没有结果,并在后台运行,稍后调用回调函数和实际结果。
一种解决方案是在getLatLng
的调用中自己指定一个回调函数:
function getLatLng(geocoder, adr, myCallback){
var latLng = '';
geocoder.geocode({
address: adr
},
function(results, status){
if (status == google.maps.GeocoderStatus.OK && results.length) {
latLng = results[0].geometry.location;
if(myCallback){
myCallback(latlng);
}
}
});
}
答案 1 :(得分:0)
这是一个异步函数,你不能这样做