У меня есть пул, где я храню данные и перебираю элементы по циклам.
Предел - 3, поэтому я получаю первые предметы trhee, три других предмета и остальные предметы.
ajax.php
ожидает секунд, что происходит из массива пулов. Таким образом, первый цикл 1,2,4
должен быть освобожден после 4
секунд, второй - 2,1,4
также 4
секунд, а остальные 3,1
- 3
секунд.
Проблема в том, что $.when
сразу же получает вызовы ajax, даже если у них нет responseText
. I'vd попытался добавить .apply
, но в этом случае мой браузер замораживает ...
Он регистрирует все запросы как объекты, но без ответа. Текст. Когда 4 сек регистрируется, через 4 секунды к нему присоединяется responseText.
Как я могу это решить?
var queue = {
limit: 3,
pool: [
1, 2, 4,
2, 1, 4,
3, 1
]
};
function startAjaxRequests() {
var requests = [];
while (queue.pool.length > 0) {
for (var i = 0; i < queue.limit; i++) {
if (typeof queue.pool[i] !== 'undefined') {
requests.push($.get('/ajax.php', {secs: queue.pool[i]}, function() {}));
}
}
$.when($, requests).done(function() {
//$.when.apply(null, requests).done(function() {
$.each(arguments, function (key, value) {
console.log(value);
});
queue.pool.splice(0, queue.limit);
requests = [];
});
}
console.log('finish...');
}
startAjaxRequests();
Если я использую так:
var a1 = $.get('/ajax.php', {secs: 1});
var a2 = $.get('/ajax.php', {secs: 2});
var a3 = $.get('/ajax.php', {secs: 4});
$.when(a1, a2, a3).done(function() {
$.each(arguments, function (key, value) {
console.log(value);
});
});
, то он работает, как положено, и утешает результаты через 4 секунды.
Спасибо. Я включил функцию, потому что знал, что это должно быть рекурсивным, глупым, я не знаю, как я могу это забыть. Огромное спасибо. Работает как шарм. – vaso123