JQuery - 异步类构造函数

时间:2015-12-21 16:29:47

标签: javascript jquery prototype jquery-deferred deferred

这是我的“类”(扩展原型)及其构造函数:

encsTable = function(encsData) {
    var that = this;
    var drfrd = $.Deferred();
    this.init(encsData).done(function(){
        drfrd.resolve(that);
    });
    return $.when(drfrd).done().promise();
}

$.extend(encsTable.prototype, {
    init: function(encsData) {
        var drfrd = $.Deferred();
        $.each(encsData, function(index, val){
            /* 
              ...
              Some async AJAX calls 
              ...
            */
            if (index == encsData.length - 1){
                drfrd.resolve();
            }
        });
        return $.when(drfrd).done().promise();
    }
});

我正在努力创建encsTable的新对象。以下是我目前的工作方式:

newEncsTable = new encsTable(encs).done(function(val){
    val.some_method();
});

正如您所看到的那样,这不是一个好方法。 newEncsTable不是encsTable对象,而是Promise对象。为了访问encsTable的其他方法,我必须使用val变量。我想做这样的事情:

newEncsTable = new encsTable(encs).done().get_return_value();
newEncsTable.some_method();

我知道延迟对象的工作方式并非如此,但有没有解决办法?

答案:

我必须等待构造函数在执行some_method函数之前完成,因为我在这个函数中使用了encsTable类的私有属性。其中一些属性取决于构造函数内执行的AJAX调用。 我决定将AJAX调用从构造函数移动到some_method函数。多亏了我摆脱了构造函数中的承诺。

0 个答案:

没有答案