Проблемы с доступом к внешней базе данных внутри Для итератора - PullRequest
0 голосов
/ 22 мая 2018

У меня есть массив с именем countryData , в котором хранятся имена для разных стран, например:

      [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)

    }

По сути, мне нужно обновить var items в соответствии с длиной данных ответа от http.get Это пример того, что я получаю, как только я console.log obj:

    France,,2,Thriller, D'eux

Как вы можете видеть, второй элемент в массиве пуст, когда он должен был быть целым числомпредставляющий, сколько связанных с Францией предметов было найдено в базе данных ... Что я делаю не так?Я понимаю, что база данных велика, и для ее загрузки может не хватить времени.Любая идея?

Заранее спасибо:)

1 Ответ

0 голосов
/ 22 мая 2018

Проблема в том, что ваш вызов данных является асинхронным и не завершился до того, как вы попытались отправить данные в массив.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...