如何使用for循环将数据从fetch()推送到Javascript中的数组



我正试图从存储在数组中的几个url中获取数据。每个url都包含json格式的数据。我使用for循环来迭代存储在url数组中的url。每个json文件都包含我感兴趣的travelTimeInSeconds值。当运行以下代码时,存储在timeT变量中的两个值会记录在控制台中。但是,ttTimes数组仍然为空。如何获取要存储在ttTimes数组中的值?

urls = ['www.a.com/dataa.json','www.b.com/datab.json']
ttTimes = []
function getData(url) {
fetch(url)
.then(response=>{
return response.json()
})
.then(data =>{
let timeT = Math.round(data['routes'][0]['summary']['travelTimeInSeconds']/60); 
console.log(timeT)
ttTimes.push(timeT)
})
}
for (url in urls){
time = getData(urls[url])
console.log(time)
ttTimes.push(time)
};

ttTimes数组保持为空,因为在检查它之前,您从不等待promise解析。在检查结果数组之前,您可以使用Promise.all等待所有promise。

urls = ['www.a.com/dataa.json','www.b.com/datab.json']
// This function just returns a promise
function getData(url) {
return fetch(url)
.then(response=>{
return response.json()
})
.then(data =>{
const timeT = Math.round(data['routes'][0]['summary']['travelTimeInSeconds']/60); 
return Promise.resolve(timeT);
})
}

Promise.all(
// use the urls to create an array of promises
urls.map(getData)
).then((ttTimes) => {
// When all the promises have been resolved, then this will be executed
//Here all the promises have been resolved, so you would have an array with the ttTimes
console.log(ttTimes);
})

最新更新