首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery延迟队列不回叫

jQuery延迟队列不回叫
EN

Stack Overflow用户
提问于 2013-05-09 18:08:32
回答 1查看 245关注 0票数 0

我在获取延迟对象的队列以在完成时回调时遇到了问题。

正如您在以下代码中看到的,我正在创建一个队列(根据这个答案:JQuery - $.when syntax for array of Deferred objects),但不幸的是,答案中没有包含doSomeWork函数的内容。假设我需要像下面这样调用defer.resolve()。

代码语言:javascript
复制
    _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:

代码语言:javascript
复制
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);
        }
    });
}
EN

回答 1

Stack Overflow用户

发布于 2013-05-09 18:43:13

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16459265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档