我可以提醒该值,但不能从该函数作为值返回

时间:2019-06-17 19:28:21

标签: javascript function functional-programming

我想从函数中返回一个值。当我在外部调用该函数而没有返回任何内容,而只是警告'res'变量时,它会警告正常。但是,当我从函数返回res变量,然后警告整个函数时,它会警告“未定义”。为什么会这样? 我想再次提及,当我向res变量发出警报时,所有警报都会正常,只是我无法从函数中返回。

https://.visualstudio.com/Project/_git/_optimized/Repo

1 个答案:

答案 0 :(得分:1)

geocoder.geocode异步执行,并接受回调。

geocoder.geocode完成后才调用回调。由于它是异步工​​作的,因此您的return res是在您的回调中实际设置{em> res之前执行的。

一个简单的解决方法是将async/await与Promise一起使用来包装您的异步函数:

async function geocodeLatLng(location, method) {
    var geocoder = new google.maps.Geocoder;
    return await new Promise((resolve, reject) => {
        let res;
        geocoder.geocode(method, function(results, status) {
            if (status === 'OK') {
                if (results[0]) {

                    if(method.address){
                        res = results[0].geometry.location
                        var marker = new google.maps.Marker({
                            position: res,
                            draggable:true,
                            map: map
                        });

                    }

                    else {
                        res = results[0].formatted_address
                    }

                    show_road(results[0].geometry.location);

                } else {
                    window.alert('good');
                }
            } else {
                window.alert('wrong: ' + status);
            }
            resolve(res);
        });
    });

}

(async () => {
    const result = await geocodeLatLng(center, {'location': center});
    alert(result);
})();