Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取回调函数的结果_Javascript_Function - Fatal编程技术网

Javascript 获取回调函数的结果

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 ==

我有这个功能。我似乎不明白它到底是怎么工作的。因为我想用这个函数返回returnlatlang。但它根本不起作用

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回调函数中调用。下面是一个很好的解释,它已经重写了我的代码,所以函数回调现在创建了标记。但这确实是个不错的选择。