我过去使用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时,我需要将该函数归类为完全
答案 0 :(得分:1)
我会这样做
function getQueueCount()
{
var dfrQueue = new $.Deferred(),
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 {
dfrQueue.resolve('queue');
clearInterval(intervalId);
counter = 1;
}
}, 5000);
console.log('initialize test for queue');
return dfrQueue.promise();
}
$.when.apply($, deferreds).then(function(arg) {
// all operations has completed and console out the argument provided by the last operation that completed.
console.log('all process succeeded: ' + arg);
});