@hellbladeuu

Почему возвращает undefined?

Привет! Я учу js и для практики решил сделать ToDo лист и у него есть такая функция как поиск "запрещенных" слов.

Функция поиска подстроки в переданном тексте textValue в специальном "banwords.json" файле:
function getBanWords (textValue) {
    let xhr = new XMLHttpRequest(),
        url = 'banwords.json',
        flag;

    xhr.open('GET', url);

    xhr.send();

    xhr.addEventListener('load', function () {
        if (this.status === 200) {
            let data = JSON.parse(this.response);

            for (let i = 0; i < data.length; i++) {
                if (textValue.includes(data[i])) {
                    flag = true;

                    break;
                }
            }
        }
    })

    return flag;
}


По клику на кнопку передается значение getBanWords('Привет я омикрон!') - условно "омикрон" - это запрещенное слово, то нам надо вернуть переменную flag = true или false если нет запрещенных подстрок.

Но, мне по клику возвращается undefined. Что я делаю не так?
  • Вопрос задан
  • 314 просмотров
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Я понимаю, что для вас такое поведение выглядит непонятным, но по названию вашего вопроса и тегу javascript легко догадаться о его содержимом не заходя внутрь. Просто потому, что ровно таких вопросов здесь повяляется по три в день.
Прочитайте как работает асинхронность в javascript, про промисы, про async/await.
Ответ написан
@GrayHorse
Промисифицированный аналог:
function hasBanWords(text) {    
  const url = "banwords.json";

  const xhr = new XMLHttpRequest();    
  xhr.open("GET", url);
  xhr.send();

  return new Promise(resolve => {
    xhr.addEventListener("load", function() {
        if (this.status === 200) {
          const words = JSON.parse(this.response);
          const hasSomeWords = words.some(word => text.includes(word));
          resolve(hasSomeWords);
        }
    });
  });
}

console.log(await hasBanWords("bitch on the beach"));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы