Javascript 如何从嵌套匿名函数向父函数返回值
我有一个javascript函数,它应该返回字符串的地理编码:Javascript 如何从嵌套匿名函数向父函数返回值,javascript,asynchronous,anonymous-function,Javascript,Asynchronous,Anonymous Function,我有一个javascript函数,它应该返回字符串的地理编码: function codeAddress(address) { var result = (new google.maps.Geocoder()).geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { return String(r
function codeAddress(address) {
var result = (new google.maps.Geocoder()).geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
return String(results[0].geometry.location.Ya)+','+String(results[0].geometry.location.Za)
} else {
return status;
}
});
console.log(result);
return result
}
但是,它返回“未定义”。我理解这里的错误,也就是说,由于javascript是异步的,它甚至在
函数(结果、状态)
完全执行之前就从函数codemaddress
返回。但是我需要知道这里的解决方案和最佳实践。因为它是异步的,所以您应该传递一个处理函数的回调:
function codeAddress(address, callback) {
(new google.maps.Geocoder()).geocode({
'address' : address
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
callback(String(results[0].geometry.location.Ya) + ','
+ String(results[0].geometry.location.Za))
} else {
callback(status);
}
});
}
codeAddress("test", function(result) {
// do stuff with result
});
如果您使用的是jQuery,那么还可以使用:
function codeAddress(address, callback) {
var dfd = new jQuery.Deferred();
(new google.maps.Geocoder()).geocode({
'address' : address
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
// trigger success
dfd.resolve(String(results[0].geometry.location.Ya) + ','
+ String(results[0].geometry.location.Za));
} else {
// trigger failure
dfd.reject(status);
}
});
return dfd;
}
codeAddress("some address").then(
// success
function(result) {
// do stuff with result
},
// failure
function(statusCode) {
// handle failure
}
);
可能重复的