访问内部外部数据库时出现问题 对于迭代器



我有一个名为countriesData的数组,用于存储各个国家/地区的名称,如下所示:

[Germany,France,Canada,Austria,Switzerland,Spain]

我正在尝试遍历该数组中的每个元素,这个想法是在外部 API 的查询搜索中使用每个国家/地区,然后在该外部 API 中保存项目的长度。简单来说,我遍历每个国家,并计算该国家/地区有多少项目存储在外部数据库中。

我在循环之外访问数据库没有问题,但是,在 for 迭代器内部无法访问它。这是我的代码:

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这是我控制台后得到的示例.log obj:

France,,2,Thriller, D'eux

如您所见,数组中的第二个元素为空,而它应该是一个整数,表示在数据库中找到多少个与法国相关的项目...... 我做错了什么?我知道数据库很大,可能没有足够的时间加载它。有什么想法吗?

提前致谢:)

问题是您的数据调用是异步的,并且在您尝试将数据推送到数组之前尚未完成。

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);
}

最新更新