如何在Javascript中从API获取对象后立即将其存储在数组中?

如何在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和long,例如
{“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('...