我在遇到延遲對象的隊列以完成回調時遇到問題。jQuery延遲隊列沒有回電
正如你在下面的代碼中看到的,我創建了一個隊列(根據這個答案:JQuery - $.when syntax for array of Deferred objects),但是不幸的是答案不包括doSomeWork函數的內容。據推測,我需要調用defer.resolve(),因爲我在下面做。
_getTagLabels: function(tags, callback){
var self = this;
var queue = [];
for (i = 0; i < tags.length; i++) {
var tag = tags[i];
queue.push(new $.Deferred(
function (defer){
self.getLabel(tag.id, function(label) {
tag.label = label;
defer.resolve();
})
}
).promise()
);
}
$.when.apply(undefined, queue).then(function(){
callback();
});
}
但是,回調從未達到。儘管defer.resolve()中的斷點正在被命中並且正在設置標籤標籤。我嘗試了其他各種延遲方法,比如done()和then(),但沒有一個可以觸發回調。
編輯
這裏的getLabel和getConcept:
getLabel: function(id, callback) {
var self = this;
self.getConcept(id, function(concept){
callback(concept.label);
});
}
getConcept: function(id, callback){
var self = this;
// abort any current queries.
if (self.getConceptXHR) self.getConceptXHR.abort();
var url = String.format(self.options.conceptTemplate, self.options.serviceEndpointUrl, id);
self.getConceptXHR = $.ajax({
dataType: "jsonp",
url: url,
success: function (response) {
callback(response);
}
});
}
又是什麼getLabel()呢? – adeneo 2013-05-09 10:15:23
我已將它們添加到問題 – user2365778 2013-05-09 10:31:32
這些問題似乎沒有問題,因爲它們正在返回標籤數據,並且defer.resolve()正在被擊中..? – user2365778 2013-05-09 10:38:38