как возвратить данные из callback

Попросили сделать API. Вроде не сложно. Сделал, решил нормальный скрипт на js написать, с классами, промисами, со структурой в общем. В итоге споткнулся на callback-ах)

метод

  #readHTMLFile(file, back) {
            let http = new XMLHttpRequest();
            if (this.#checkFileExist(file, http)) {
                    http.onreadystatechange = function() {
                        if (this.readyState == 4 && this.status == 200)
                            if(back) window.responseCustom = back(this.responseText)

                    }
                    http.open("GET", file, true);
                    http.send();
                    
                    console.log(window);
            } else (new API()).ShowError({message: 'Error in reading the file component'});
        }

я вызываю back функцию, которая дальше идет, и возвращает в ответ промис, который я хочу вернуть из функции.

Но как бы я не старался, не могу этого сделать. Я уже и в window - решил записать

 if(back) window.responseCustom = back(this.responseText)

Я вижу, в консоле, что св-во есть (смотри вложения)

console.log(window);

Св-во

Запросы

Но когда пытаюсь напрямую обратиться, то пишет undefined

console.log(window.responseCustom);

CallBack функция

                    let pr = this.#readHTMLFile(filesName, function (filesText) {

                            let virtualDocument = document.implementation.createHTMLDocument("Virtual Document");
                            virtualDocument.documentElement.innerHTML = filesText;
                            let l = virtualDocument.querySelectorAll(".block-container");

                            l.length > 0 ? l : (new API()).ShowError({message: 'Error: File is empty'})

                            //Запрос за данными

                            let pars_meth = (new Parsing(1)).parsing(action);
                            if (typeof pars_meth === 'object')
                            {
                                const API_STAND = new API('fgjfkgjkfjg');

                                return API_STAND.makeQuery(pars_meth.name, obj => {
                                    pars_meth.name = pars_meth.name.replace(/\/api\//i, '');

                                    // Используем Фейкер. ТОЛЬКО ДЛЯ ТЕСТА!!!
                                    obj = (new Faker(pars_meth.name, 200)).getDataFaker();

                                    window.aa = obj;

                                    if (obj.status === "error") {
                                        (new API()).ShowError({message: obj.data.message})
                                        return false;
                                    }

                                    Object.keys(obj.data).map(function(message, index) {
                                        let h = '.'+pars_meth.name+'_'+message;
                                        // console.log(h);
                                        // Ищем классы, и заменяем данные
                                        let current_el = l[0].querySelector('.'+pars_meth.name+'_'+message);
                                        if (current_el !== null) {
                                            if (pars_meth.parse === 'li' && (current_el.tagName === 'OL' || current_el.tagName === 'UL') ) {
                                                let p = obj.data[message].split(/(\d+)/);
                                                obj.data[message] = '';
                                                p.forEach(function (t, i) {
                                                    if (i % 2 === 0 && i !== 0) {
                                                        obj.data[message] += "<li>" + t + "</li>";
                                                    }
                                                })

                                            }
                                            current_el.innerHTML = obj.data[message]
                                        }
                                    });
                                    // Перебираем полученные nodes и вставляем в родительский документ (основной)
                                    let AddSection = document.getElementsByClassName('container')[0];
                                    AddSection.innerHTML = '';
                                    [].forEach.call(l, function(item) {
                                        AddSection.appendChild(item);
                                    });

                                    return obj;

                                }, pars_meth.method);

                            }
                    });

Подскажите пожалуйста в чем проблема может быть


Ответы (0 шт):