我使用Google Geocoding API对我的地址进行地理编码,例如从“地址150,城市”到纬度和经度。在函数的最后,我试图返回一个对象,其中包含这两个对象,如下面的代码所示。
我认为问题可能是,编码需要花费一些时间,并且由于我今天想解决此问题,而且我还没有学会使用promise和东西进行等待和异步(我会这样做,不用担心),我改为使用setTimeout,但是即使在编码完成后以为我正在调用console.log,它也无法解决问题。由于我是JS的新手,所以我只是尝试将其包装到变量中,只使用一些代码,但都没有帮助。
// address
var address = "Address 156, City"
function geocode(address) {
axios.get("https://maps.googleapis.com/maps/api/geocode/json", {
params: {
address: address,
key: "AIzaSyDaXOpbCeLYeRxWXtuSQQEbQzR14PejczM"
}
})
.then((response) => {
let lngLat = {
lat: response.data.results[0].geometry.location.lat,
lng: response.data.results[0].geometry.location.lng}
console.log(lngLat) // here it shows me my object
return lngLat;
})
}
let geocodedAddress = geocode(address);
setTimeout(function () { console.log(geocodedAddress); }, 3000);
}
});
答案 0 :(得分:1)
您的函数中没有return
。 return
中的then()
不会返回外部函数。
此外,该请求是异步的,因此您需要返回axios.get
承诺,并在调用函数时使用另一个then()
访问数据
function geocode(address) {
// return the promise
return axios.get("https://maps.googleapis.com/maps/api/geocode/json", {
params: {
address: address,
key: "AIzaSyDaXOpbCeLYeRxWXtuSQQEbQzR14PejczM"
}
})
.then((response) => {
let lngLat = {
lat: response.data.results[0].geometry.location.lat,
lng: response.data.results[0].geometry.location.lng
};
return lngLat;
});
}
// usage
geocode(address).then(lngLat => {
console.log(lngLat);
});
答案 1 :(得分:0)
好吧,我无法访问您的整个代码,但是采用异步/等待方法来解决您的问题,您将是:
// address
var address = "Address 156, City"
async function geocode(address) {
const response = await axios.get("https://maps.googleapis.com/maps/api/geocode/json", {
params: {
address: address,
key: "AIzaSyDaXOpbCeLYeRxWXtuSQQEbQzR14PejczM"
}
})
let lngLat = {
lat: response.data.results[0].geometry.location.lat,
lng: response.data.results[0].geometry.location.lng
}
console.log(lngLat) // here it shows me my object
return lngLat;
}
let geocodedAddress = await geocode(address);
console.log(geocodedAddress);
}
});
请注意,异步/等待如何使您能够编写简单的顺序逻辑来执行异步操作。