jQuery Promise不等到解决了

时间:2015-03-18 13:28:16

标签: jquery ajax

我有一个函数,它返回一个promise,如下所示:

var loadLimits = function (url, arr, carrier) {
    var rdata = {
        carrierId: carrier
    };

    var deferred = new $.Deferred();
    var xhr = $.get(apiHost + url, rdata);
    xhr.done(function (data) {
        arr.removeAll();
        for (var i = 0; i < data.length; i++) {
            var newItem = new LimitItem(data[i].Id, data[i].LimitText,  data[i].ILF, data[i].ApprovalRequired);
            arr().push(newItem);
        };
        deferred.resolve();
    });
    xhr.fail(function () {
        deferred.reject();
    });

    return deferred.promise();
};

我从另一个函数中调用该函数,如下所示:

  var promise = loadLimits(url, limitsArray, carrierId);
  promise.done(self.nextFunction());

为什么我的代码会在promise解析之前触发self.nextFunction?最终承诺能够成功解决,因此它不是ajax失败事件。我正在使用jQuery 1.9.1,而我正在使用Chrome进行测试。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

使用

promise.done(self.nextFunction);

promise.done(function(){ self.nextFunction(); });

您的代码会立即执行该函数,而不是将其作为引用/回调传递以便稍后执行。