获取google api地址值作为javascript函数的返回值 我正在尝试从google maps api获取地址,并在函数中返回此地址。我需要更改什么才能显示这些地址
获取google api地址值作为javascript函数的返回值 我正在尝试从google maps api获取地址,并在函数中返回此地址。我需要更改什么才能显示这些地址,javascript,jquery,google-maps,google-maps-api-3,google-api,Javascript,Jquery,Google Maps,Google Maps Api 3,Google Api,请马上看 这是不可能的,因为函数在值存在之前返回 geocode调用是异步的,因此必须异步处理结果。您已经在回调函数中成功地显示了该值,这是处理结果的方法 您可以从getAddressFromlatlng函数返回一个承诺,但这并不能真正改变任何事情。这只是将回调函数包装到一个对象中,以便您可以独立于调用对结果进行异步处理。您应该从回调结果中获取地址。解析坐标后,调用一个函数继续处理返回值,因为只有这样才能得到返回值。在处理数组的情况下,使用数组索引并在获得所需数据后更新地址字段。或者单独处理它们
- 请马上看
- 这是不可能的,因为函数在值存在之前返回
geocode
调用是异步的,因此必须异步处理结果。您已经在回调函数中成功地显示了该值,这是处理结果的方法
您可以从
getAddressFromlatlng
函数返回一个承诺,但这并不能真正改变任何事情。这只是将回调函数包装到一个对象中,以便您可以独立于调用对结果进行异步处理。您应该从回调结果中获取地址。解析坐标后,调用一个函数继续处理返回值,因为只有这样才能得到返回值。在处理数组的情况下,使用数组索引并在获得所需数据后更新地址字段。或者单独处理它们。通过数组为每个项目向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);
}
谢谢@Guffa,请查看此代码以获得解决方案[]()或[]()@acecloudsmaps:解决方案不是尝试从函数返回值。问题是循环变量不能用于将数据放入数组中,因为数据在循环完成后到达。的可能重复
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);
}