$(document).ready(function() {
var lat = 17.4807865;
var lng = 78.4921649;
var returnAddress = getAddressFromlatlng(function(backaddr,lat,lng){
alert(" Inside : "+backaddr)
});
alert(returnAddress+" returned address ")
});
function getAddressFromlatlng(callback,lat,lng){
alert(lat+" : "+lng)
var geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(lat,lng);
geocoder.geocode({'latLng': latlng}, function(results, status){
alert(results[0].formatted_address)
callback(results[0].formatted_address);
});
}
答案 0 :(得分:1)
这是不可能的,因为函数在值存在之前返回。
geocode
调用是异步的,因此您必须异步处理结果。您已经在回调函数中成功显示了值,这是处理结果的方法。
你可以从getAddressFromlatlng
函数返回一个承诺,但这并没有真正改变任何东西。这只是将回调函数包装在一个对象中,这样你就可以对调用的结果进行异步处理。
答案 1 :(得分:1)
您应该从回调结果中获取地址。一旦解析了坐标,就调用一个继续处理返回值的函数,因为只有这样才能得到返回值。如果您通过数组,则使用数组索引并在获得所需数据后更新地址字段。或单独处理它们。通过数组制作请求谷歌的每个项目。一旦响应从谷歌回来,移动到阵列中的下一个项目。如果您可以保存索引,以便在响应到达时知道它,那么就可以等待多个请求。
var currentIndex = null;
function notifyAddressResolved (address) {
yourArray[currentIndex].address = address;
resolveNextAddress();
}
function getAddressFromlatlng(callback, lat, lng){
var geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(lat, lng);
geocoder.geocode({'latLng': latlng}, function (results, status) {
callback(results[0].formatted_address);
});
}
function resolveNextAddress () {
if (currentIndex == null) {
currentIndex = 0;
} else {
currentIndex++;
}
getAddressFromlatlng(notifyAddressResolved, yourArray[currentIndex].lat, yourArray[currentIndex].lng);
}