我有一个函数,它返回一个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进行测试。
感谢您的帮助
答案 0 :(得分:1)
使用
promise.done(self.nextFunction);
或
promise.done(function(){ self.nextFunction(); });
您的代码会立即执行该函数,而不是将其作为引用/回调传递以便稍后执行。