我有一个名为 countriesData 的数组,用于存储各个国家/地区的名称,如下所示:
[Germany,France,Canada,Austria,Switzerland,Spain]
我试图遍历该数组中的每个元素,其想法是在查询中使用每个国家/地区搜索外部API,然后在该外部API中保存项目的长度。简单来说,我会浏览每个国家/地区,并计算该国家/地区中有多少项目存储在外部数据库中。
我在循环之外访问数据库没有问题,但是,在for iterator中我无法访问它。这是我的代码:
for (var iter = 0; iter < countriesData.length; iter++) {
var obj = [];
var country = countriesData[iter]
var items;
var itemsCountry = 0;
$http.get("https://api.discogs.com/database/search?q={?country==" + country + " }&token=zwxZExVZTenjPTKumVeTDVRuniqhQLAxymdzSxUQ").then(function(response) {
items = response.data.pagination.items;
})
var str = "";
obj.push(countriesData[iter]);
obj.push(items);
for (var J = 0; J < myStats.data.length; J++) {
if (myStats.data[J].country == countriesData[iter]) {
itemsCountry++;
str += myStats.data[J].title + ", ";
}
}
obj.push(itemsCountry);
var str2 = str.substring(0, str.length - 2);
obj.push(str2);
newData.push(obj);
console.log("new obj : " + obj)
}
基本上,我需要根据来自 http.get 的响应数据的长度来更新var items 这是我在console.log obj后得到的一个例子:
France,,2,Thriller, D'eux
正如你所看到的,数组中的第二个元素是空的,它应该是一个整数,表示在数据库中找到的法国相关项目的数量...... 我做错了什么?我知道数据库很大,可能没有足够的时间来加载它。任何想法?
提前致谢:)
答案 0 :(得分:2)
问题是您的数据调用是异步的,并且在您尝试将数据推送到阵列之前尚未完成。
function getCountryData(country) {
var obj = [];
var items;
var itemsCountry = 0;
$http.get("https://api.discogs.com/database/search?q={?country==" + country + " }&token=zwxZExVZTenjPTKumVeTDVRuniqhQLAxymdzSxUQ").then(function(response) {
items = response.data.pagination.items;
var str = "";
obj.push(country);
obj.push(items);
for (var J = 0; J < myStats.data.length; J++) {
if (myStats.data[J].country == countriesData[iter]) {
itemsCountry++;
str += myStats.data[J].title + ", ";
}
}
obj.push(itemsCountry);
var str2 = str.substring(0, str.length - 2);
obj.push(str2);
newData.push(obj);
console.log("new obj : " + obj)
})
}
for (var iter = 0; iter < countriesData.length; iter++) {
var country = countriesData[iter];
getCountryData(country);
}