我卡在了一些可能非常简单的事情上。
我可以通过 console.log 记录 codeAddress 函数的返回值,但无法让它返回到另一个调用它的函数。有问题的两行带有注释。
请不要介意我糟糕的 XX 连接;我只是想弄清楚函数调用。
如有任何帮助,我们将不胜感激。谢谢!
function codeAddress(zipCode) {
geocoder.geocode( { 'address': zipCode}, function(results, status) {
var lat = results[0].geometry.location.d;
var lng = results[0].geometry.location.e;
var latlng = lat+'XX'+lng;
return latlng; // I can console log this value
});
}
var citymap = {};
function loadMap() {
$.ajax({
url: 'getdata.php',
data: "query=geolocate",
dataType: 'json',
success: function (zips) {
for (var i in zips)
{
var entry = zips[i];
citymap[entry['zip_code']]= {
scans: entry['num_scans'],
position: codeAddress(entry['zip_code']) // But it will never return down here
};
}
}
});
}
最佳答案
对于异步函数,你需要提供一个回调函数,而不是期待一个返回值。您应该像这样调用“codeAddress”函数:
var entry = zips[i];
var citymapForZip = {
scans: entry['num_scans'],
};
var zipCode = entry['zip_code'];
citymap[zipCode] = citymapForZip;
codeAddress(zipCode, getCallbackFunction(citymapForZip));
我使用了辅助函数“getCallbackFunction”,它应该为给定的城市 map 生成回调函数。回调将简单地获取地理编码结果,并设置城市 map 的“位置”属性。像这样:
function getCallbackFunction(citymap) {
return function(result) {
citymap.position: result;
};
}
最后,您的 codeAddress
函数应该将其传递给回调,而不是返回“latlng”:
function codeAddress(zipCode, callback) {
geocoder.geocode( { 'address': zipCode}, function(results, status) {
var lat = results[0].geometry.location.d;
var lng = results[0].geometry.location.e;
var latlng = lat+'XX'+lng;
callback(latlng);
});
}
关于javascript - Javascript 函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21638082/