我想从函数中返回一个值。当我在外部调用该函数而没有返回任何内容,而只是警告'res'变量时,它会警告正常。但是,当我从函数返回res变量,然后警告整个函数时,它会警告“未定义”。为什么会这样? 我想再次提及,当我向res变量发出警报时,所有警报都会正常,只是我无法从函数中返回。
https://.visualstudio.com/Project/_git/_optimized/Repo
答案 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);
})();