从 javascript 函数中获取 google api 地址值作为 return

get google api address value as return from javascript function

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

这是不可能的,因为函数 returns 在该值存在之前。

geocode 调用是异步的,因此您必须异步处理结果。您已经在回调函数中成功显示了值,这是处理结果的方式。

您可以 return 来自 getAddressFromlatlng 函数的承诺,但这并没有真正改变任何东西。这只是将回调函数包装在一个对象中,这样您就可以独立于调用对结果进行异步处理。

您应该从回调的结果中获取地址。解析坐标后,您将调用一个继续处理 returned 值的函数,因为只有这样您才能获得 return 值。如果您遍历数组,请使用数组索引并在获得所需数据后更新地址字段。或单独处理它们。遍历数组,为每个项目向 google 发出请求。一旦响应从 google 返回,移动到数组中的下一个项目。如果您可以保存索引,以便在响应到达时知道它,那么就可以等待多个请求。

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