gpt4 book ai didi

node.js - 如何从 Node.js 中的异步 axios 请求中获取数据

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:54 24 4
gpt4 key购买 nike

我试图在 foreach 循环中从 axios 请求获取数据,但每次它都是未定义的。如果我将 console.log 移到 .then 函数内,它会起作用,但在循环之后,它会返回空数组。我确实发现,在保存到数组之前它正在重新进入循环。我该如何解决这个问题?

var temp = [];

for(var route of coordinates) {
axios('https://api.openweathermap.org/data/2.5/weather?lat=' + route.position.latitude + '&lon=' + route.position.longitude + '&units=metric&appid=39f1004c7ecc22d6f734974c44428625')
.then((response)=>{
temp.push({lat: route.position.latitude, lon: route.position.longitude, temp: Math.round(response.data.main.temp)});
})
.catch((error)=>{
console.log(error)
})
}

console.log(temp);

最佳答案

尝试阅读并理解这一点:
(https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Introducing)

<小时/>在那之前,请查看下面的代码。循环中的控制台日志将持续显示 temp,直到最后一次迭代中的最后一个 axios 响应。


var temp = [];
let idx = coordinates.length;

for (var route of coordinates) {

axios('https://api.openweathermap.org/data/2.5/weather?lat=' + route.position.latitude + '&lon=' + route.position.longitude + '&units=metric&appid=39f1004c7ecc22d6f734974c44428625')
.then((response) => {
temp.push({ lat: route.position.latitude, lon: route.position.longitude, temp: Math.round(response.data.main.temp) });

// if this is the last iteration show temp
if (!--idx) {
console.log(temp);
}

})
.catch((error) => {
console.log(error)
})

}

// this won't wait for axios calls so temp is empty
console.log(temp);

关于node.js - 如何从 Node.js 中的异步 axios 请求中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59685126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com