В прошлом я использовал без отложенных объектов jQuery без проблем, и я понимаю, как они работают.
Теперь я столкнулся с новой ситуацией, когда мне нужно использовать их снова.
У меня есть несколько подобных функций, которые я добавляю в отложенный массив. Эти функции используют ajax для получения значения каждые 5 секунд, пока счетчик не достигнет 0
.
deferreds.push(
getQueueCount()
);
function getQueueCount()
{
var counter = 1,
intervalId = setInterval(function() {
if(counter > 0) {
$.ajax({
type: 'POST',
url: 'path/to/script',
dataType: 'json',
data: {
'queuename': 'myqueue',
'total' : 10
},
success: function(response) {
$('#progress').width(response.width + "%").find('span').text(response.width + '%');
counter = response.size;
}
});
}
else {
clearInterval(intervalId);
intervalId = null;
counter = 1;
return intervalId;
}
}, 5000);
}
Однако, когда я запускаю следующий код, кнопка активируется
$.when.apply($, deferreds).done(function() {
$('#btn-sync').prop('disabled', false);
});
Мой вопрос: как я могу предотвратить включение кнопки, пока моя функция не будет завершена? Мне нужно, чтобы функция была классифицирована как завершенная, когда счетчик в каждой функции достигает 0