我在获取延迟对象的队列以在完成时回调时遇到了问题。
正如您在以下代码中看到的,我正在创建一个队列(根据这个答案: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()上的断点并且设置了标记标签。我已经尝试过defer的其他各种方法,比如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);
}
});
}发布于 2013-05-09 18:43:13
var obj = {
_getTagLabels: function(tags, callback){
var self = this,
queue = [];
for (i = 0; i < tags.length; i++) {
(function(y)
queue.push(
self.getLabel(tag.id).done(function(result) {
tags[y].label = result.label;
});
);
})(i);
}
$.when.apply($, queue).done(callback);
},
getLabel: function(id){
if (this.getConceptXHR) this.getConceptXHR.abort();
var url = String.format(this.options.conceptTemplate, this.options.serviceEndpointUrl, id);
this.getConceptXHR = $.ajax({
dataType: "jsonp",
url: url
});
return this.getConceptXHR;
}
}https://stackoverflow.com/questions/16459265
复制相似问题