У меня есть функция, которой нужно вызвать ссылку (формат JSON), дело в том, что хотелось бы иметь возможность предзагрузить эту ссылку, чтобы сгладить и сократить время работы при вызове функции.
onSelectionChanged: function (selectedItems) {
selectedItems.selectedRowsData.forEach(function(data) {
if (data) {
colorMe(data.target)
}
});
}
function colorMe(item){
globalItem = item;
request('http://blablabla/?format=json',findMaterial);
};
function findMaterial(data){
jq310.each(data, function(table) {
if (data[table].identifier == globalItem){
globalData = data[table]
request('http://another-blablabla/?format=json',findMatchArea);
};
});
};
function findMatchArea(areas){
jq310.each(areas, function(area) {
blablabla
Функция запроса, которую я создал, просто проверяет, была ли ссылка уже вызвана, поэтому перезагружает ее, если она верна. А также отправить данные из ссылки в вызываемую функцию.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы хотите загрузить статический файл json, вам следует подумать о его загрузке в верхней части вашего файла. Для этого вы должны хранить данные в глобальной переменной следующим образом:
let datas;
request('http://blablabla/?format=json', (data) => {
datas = data
});
onSelectionChanged: function (selectedItems) {
selectedItems.selectedRowsData.forEach(function(data) {
if (data) {
globalItem = data.target;
findMaterial();
}
});
}
function colorMe(item){
globalItem = item;
};
function findMaterial(){
const data = datas;
jq310.each(data, function(table) {
if (data[table].identifier == globalItem){
globalData = data[table]
request('http://another-blablabla/?format=json',findMatchArea);
};
});
};
Наконец-то я нашел способ сделать это правильно, вот он:
var mylink = 'https://fr.wikipedia.org/wiki/JavaScript';
function preloadURL(link){
var xhReq = new XMLHttpRequest();
xhReq.open("GET", link, false);
xhReq.send(null);
var jsonObject = JSON.parse(xhReq.responseText);
return jsonObject;
};
jsonObjectInv = preloadURL(mylink);
И я просто указываю на свою переменную json, чтобы проанализировать ее (действительно быстрее)
function colorMe(item){
globalItem = item;
findMaterial(jsonObjectInv);
};
Задача решена