如何在Javascript中从API获取对象后立即将其存储在数组中?
在转换位置时,我希望创建一个对象作为实际位置的lat和long,例如如何在Javascript中从API获取对象后立即将其存储在数组中?,javascript,arrays,api,object,Javascript,Arrays,Api,Object,在转换位置时,我希望创建一个对象作为实际位置的lat和long,例如{“lat”:123123,“lng”:12324},并立即将其存储到坐标数组中。但是,在最后,当我检查坐标数组时,它显示为空数组。这是因为coordinates.push({“lat”:lat,“lng”:lng})命令在从web获得响应后没有立即执行吗 我正在获取适当位置的所有LAT和日志。但无法将其存储到数组中 为了安全起见,我取下了钥匙。 如何将对象存储到数组中 var coordinates = []; fo
{“lat”:123123,“lng”:12324}
,并立即将其存储到坐标
数组中。但是,在最后,当我检查坐标
数组时,它显示为空数组。这是因为coordinates.push({“lat”:lat,“lng”:lng})
命令在从web获得响应后没有立即执行吗
我正在获取适当位置的所有LAT和日志。但无法将其存储到数组中
为了安全起见,我取下了钥匙。
如何将对象存储到数组中
var coordinates = [];
for(var i = 0; i < locations.length; i++) {
console.log(locations[i]);
geocode(locations[i]);
}
function geocode(location) {
axios.get('https://maps.googleapis.com/maps/api/geocode/json', {
params : {
address: location,
key : 'api_key'
}
})
.then(function(response){
var lat = response.data.results[0].geometry.location.lat;
var lng = response.data.results[0].geometry.location.lng;
coordinates.push({"lat" : lat, "lng": lng});
})
.catch(function(error) {
console.log(error);
});
}
var坐标=[];
对于(变量i=0;i
axios.get
没有阻塞,这意味着将启动请求,然后代码将继续运行,然后请求完成,并将在中运行代码。然后
。您应该从geocode
函数返回承诺,然后使用等待结果
但是,在最后,当我检查坐标数组时,它显示为一个空数组
什么时候结束?可能是for
循环,在这种情况下,您阅读它太早了。请记住,对象是异步推送到坐标的,即在for
循环完成后推送到
有几种方法可以解决这个问题。一种方法是记录Axios.get()
返回的承诺,然后在解决所有承诺后执行Promise.all()
来记录数组
let coordinates = [],
promises = [];
for(let i = 0; i < locations.length; i++) {
console.log(locations[i]);
promises.push(geocode(locations[i]));
}
Promise.all(promises).then(() => {
console.log(coordinates); //will now be populated
});
到
您使用的是坐标
问题是您可能在异步调用完成之前阅读了它。正如@epascarello提到的,您尝试检查数组的时间非常重要。似乎您正在尝试在异步调用完成之前检查它。我建议您包含更多代码,以显示检查阵列的位置。谢谢。我明白你的意思。我通过@Mitya的代码解决了这个问题,它给出了坐标。但是我不能在这个范围之外使用坐标数组<然后(()=>{console.log(坐标);//现在将被填充})
在此范围之外,坐标
数组作为空数组再次不给我任何东西。
axios.get('...
return axios.get('...