@Umd23

Почему массив глобальной переменной стал пустым вне функции?

Есть небольшой скрипт на node.js, который сначала получает массив id, потом перемешивает их, далее ищет по id имена людей и записывает новый массив.
Но объявив глобальную переменную arrName, никак не получается вывести этот массив, а точнее он почему то пустой.

function shuffle(array) {
    array.sort(() => Math.random() - 0.5);
}
const arrName = [];
const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
const x = new XMLHttpRequest();
x.open('GET', 'https://slack.com/api/conversations.members?token=xxx&channel=xxx');
x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
x.onload = function() {
    let array_1 = JSON.parse(this.responseText).members;
    shuffle(array_1);
    var array_cleaned = array_1.filter(function(element) {
        return element.length <= 9;
    });
    var array_cleaned2 = array_cleaned.filter(function(element2) {
        const y = new XMLHttpRequest();
        y.open('GET', 'https://slack.com/api/users.profile.get?token=xxx&user=' + element2);
        y.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
        y.onload = function() {
        let array_2 = JSON.parse(this.responseText).profile.display_name;
            console.log('В группе состоит ' + array_2);
        arrName.push(array_2);
        }
        y.send();
    });
    console.log(array_cleaned);
    console.log(arrName);
}
x.send();


Почему console.log(arrName);
выводит просто пустой массив?
При этом если я проверяю arrName после строчки "arrName.push(array_2);" , то массив выводится(что логично 3 раза)
  • Вопрос задан
  • 130 просмотров
Решения вопроса 2
@AEVZP
Асинхронные запросы.

console.log(arrName) - выводится раньше, чем выполнится всё то, что находится в array_cleaned2
Ответ написан
@dimoff66
Кратко о себе: Я есть
Потому что вы заполняете его внутри callback-а, который на момент вывода console.log(arrName)
еще не был вызван.
Поставьте вывод после строчки
arrName.push(array_2);

чтобы убедиться, что сначала выводится пустой массив, а потом уже он начинает заполняться
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы