Здравствуйте. Проблема в следующем:
Со страницы должно быть отправлено много ajax запросов (больше 30 точно), все к одному скрипту.
Что бы не нагружать браузер, хочу сделать стек запрсов, т.е. из стека (в роли которого будет массив) будут браться по 5 первых параметров, и на основе этих параметров создаваться пять ajax запросов. По мере того как запросы отработали, будут обновлены соответствующие элементы на странице и обновлен стек.
Пока реализация такая:
вначале создаем переменные:
var allArray = new Array(); // массив со всеми элементами (параметрами), на основе которых должны быть созданы ajax запросы
var allArrayStack = new Array(); // стек по 5 элементов (запрсов)
const STACK_LENGTH = 5; // длина стека
var intervalId = null; // intervalID, возвращаемый методом setInterval()
как только allArray заполнен, вызывается функция gettingResults:
function gettingResults() {
intervalId = setInterval(appendStack, 1000);
}
function appendStack() {
if( (allArrayStack.length < STACK_LENGTH) && (allArray.length > 0) ) {
var counterHight = STACK_LENGTH - allArrayStack.length;
for (var i = 0; i < counterHight ; i++) {
if(allArray.length == 0) {
clearInterval(intervalId);
break;
}
allArrayStack[allArrayStack.length] = allArray[0];
allArray.splice(0,1)
}
} else if(allArray.length == 0) {
clearInterval(intervalId);
}
// здесь получаем заполненный allArrayStack , на основе которого можем создавать ajax запросы.
}
Вопрос в том, какая должны быть логика далее? Т.е. передать allArrayStack в новый поток нельзя, так как весь js выполняется в одном потоке. Если передать allArrayStack в другую функцию, то по идее она не начнет выполнение пока не будет выполнен clearInterval(intervalId); (тут я сомневаюсь, я прав?)