Попросили сделать 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);
}
});
Подскажите пожалуйста в чем проблема может быть

