我无法让延迟对象队列在完成后回调。
正如您在以下代码中看到的那样,我正在创建一个队列(根据此答案: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);
}
});
}