我以循环方式从多个来源异步轮询数据,并希望在所有这些轮询完成后重复轮询。我正在尝试将 jQuery Deferred 对象与“always”一起使用来重复我的轮询,如下面的代码所示:
function makeAjaxCall(region) {
var params = {
'action': POLLER.action,
},
url = POLLER.region_to_url[region];
return $.ajax({
dataType: "json",
url: url,
data: params,
success: (function(region) {
return function(result, status) {
handleAjaxResult(result, status, region);
};
})(region),
error: (function(region) {
return function(jqXHR, textStatus, errorThrown) {
handleAjaxError(jqXHR, textStatus, errorThrown, region);
};
})(region)
});
}
function nextPoll() {
if(!polling) {
return;
}
var requests = [];
$.each(POLLER.regions, function(i, region) {
requests.push(makeAjaxCall(region));
});
$.when.apply($, requests)
.always(function() {
log("deferred.always ", this)
updateSummary();
var delay = POLLER.POLLER_INTERVAL_MS;
if (delay != 0) {
pollerTimeout = setTimeout(nextPoll, delay);
}
}).fail(function() {
log("fail for ",this)
});
}
我的问题是,当我的一项民意调查失败时,会调用“始终”块。我可能错误地假设在所有请求完成或失败后应该调用“总是” 。我打算让它以这种方式运行,所以任何关于不同的,也许更简单的方法的提示都会很棒。