Javascript 获取回调函数的结果
我有这个功能。我似乎不明白它到底是怎么工作的。因为我想用这个函数返回returnlatlang。但它根本不起作用Javascript 获取回调函数的结果,javascript,function,Javascript,Function,我有这个功能。我似乎不明白它到底是怎么工作的。因为我想用这个函数返回returnlatlang。但它根本不起作用 var geocoder = new google.maps.Geocoder(); function codeAddress(address) { var returnlatlang; geocoder.geocode( { 'address': address}, function(results, status) { if (status ==
var geocoder = new google.maps.Geocoder();
function codeAddress(address) {
var returnlatlang;
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
returnlatlang = results[0].geometry.location;
console.log(returnlatlang); // this is defined.
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
console.log(returnlatlang); // this is undefined.
return returnlatlang;
}
在这种情况下作用域是如何工作的?codeAddress在异步函数能够设置变量returnlatlong之前返回变量returnlatlong
你可以用一个,一个基本的例子如下:
function codeAddress(address){
return new Promise(function(resolve, reject){
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
returnlatlang = results[0].geometry.location;
resolve(returnlatlang); // this is defined.
} else {
reject('Geocode was not successful for the following reason: ' + status);
}
});
}
codeAddress('some address').then(function(){
//the promise resolved
}, function(){
//the promise rejected
});
这不是关于作用域,而是关于执行时间。回调是异步执行的吗?所以它可以在我返回值后完成?returnlatlang结果将在codeAddress函数后返回,但实际值应由回调函数获取。所以你现在不能得到它。您应该定义一个回调函数,在回调函数中使用returnlatlang,并将回调设置为在geocode回调函数中调用。下面是一个很好的解释,它已经重写了我的代码,所以函数回调现在创建了标记。但这确实是个不错的选择。