我在遇到延迟对象的队列以完成回调时遇到问题。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