[英]Return value for Javascript Function
我陷入了一些可能非常简单的事情。
我可以从codeAddress函数中调用console.log一个返回值,但我不能让它返回另一个调用它的函数。 有问题的两条线都带有评论。
请不要介意我可怕的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”,它应该为给定的城市地图生成回调函数。 回调将简单地采用地理编码结果,并设置城市地图的“位置”属性。 像这样:
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);
});
}
这与范围有关。
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
});
返回到codeAddress的范围,但codeAddress不返回调用者的范围。
由于对geocode
功能的调用是异步的,因此必须使用回调来使用其结果:
function codeAddress(zipCode,cb) {
geocoder.geocode( { 'address': zipCode}, function(results, status) {
//maybe you want to check status for error condition here
var lat = results[0].geometry.location.d;
var lng = results[0].geometry.location.e;
var latlng = lat+'XX'+lng;
cb(zipCode, latLng);
});
}
var citymap = {};
function loadMap(cb) {
$.ajax({
url: 'getdata.php',
data: "query=geolocate",
dataType: 'json',
success: function (zips) {
var i = 0,
l = remaining = zips.length;
for (; i <l; i++) //better way to loop an array
{
var entry = zips[i];
codeAddress(entry['zip_code'], function (zipCode,results){
citymap[zipCode] = {
scans: entry['num_scans'],
position: results;
};
if (--remaining) {
cb();
}
});
}
}
});
}
//call also loadMap with a callback to know when all zip are resolved
loadMap(function() {
console.dir(citymap); //all done!
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.