@cdfgharweer33

Как переписать функцию?

Имеется функция
function getElement(url, selector, c) {
                request(new XMLHttpRequest());

                function request(xhr) {
                    xhr.open('GET', 'http://asdc.cf' + url, true);
                    xhr.send();
                    xhr.onreadystatechange = function() {
                        if(xhr.readyState == 4) {
                            if(xhr.status == 200) {
                                html = document.createElement('div');
                                html.innerHTML = xhr.responseText;
                                c(html.querySelector(selector));
                            }
                        }
                    }
                }
            }

Использую её так
getElement('https://toster.ru/', '#nav-questions', function(element) {
    console.log(element);
});


Можно ли её переписать так, чтобы можно было использовать не как функцию в функции, а просто как одиночную функцию и записывать результат в строку?
var str = string;
string = getElement('https://toster.ru/', '#nav-questions');

JS знаю плохо, просто нужно для единичных случаев.
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
Bobsans
@Bobsans
Full-Stack Developer
Так не сработает.
Как вариант можно использовать промисы, но по сути это то же.
Если используете какой-либо транспилятор, то можно воспользоваться синтаксисом async/await.

Тогда будет выглядеть как-то так:
function getElement(url, selector) {
    return new Promise(function(resolve, reject) {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'http://asdc.cf' + url, true);
        xhr.onreadystatechange = function() {
            if(xhr.readyState === 4) {
                if(xhr.status === 200) {
                    html = document.createElement('div');
                    html.innerHTML = xhr.responseText;
                    resolve(html.querySelector(selector));
                }
            }
        }
        xhr.send();
    });
}

И использование:
var result;
getElement('https://toster.ru/', '#nav-questions').then(function(res) {
    result = res;
});

или если использовать async/await:
let result = await getElement('https://toster.ru/', '#nav-questions');
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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