【发布时间】:2015-11-20 20:33:16
【问题描述】:
即使我能够将 promise 作为参数传递给错误函数,它也不会触发调用者的 then & error 函数。?
如果我更改代码以将 AJAXError 函数内联,一切正常。
是否可以将 Promise 作为参数传递,并且仍然能够在那时触发并在链中的调用者上失败。
注意:promise 是从 PalletizerService.addSerialNumberToPallet 返回的,但在不同的函数 AjaxFailed 中解决/拒绝。
palletizerService.addSerialNumberToPallet ('p1','s1')
.then( function (response){
console.log('success');
},
function(error){
console.error(error);
});
下面是我从上面的代码调用的服务
palletizerService.addSerialNumberToPallet = function (palletID, serialNumber) {
var deferred = $q.defer();
$.ajax({
url: url,
type: "GET",
dataType: "json",
methodName: methodName,
deferred: deferred.promise,
data: "palletID=" + palletID + "&serialNumber=" + serialNumber,
timeout: 20000, // 20 seconds for getting result, otherwise error.
error: AjaxFailed,
complete: function (jqXHR, textStatus) {
console.log("Ajax-finally : " + methodName);
},
beforeSend: function (qXHR, settings) {
},
success: function (data, textStatus, jqXHR) {
console.log("Ajax-Sucess " + methodName);
deferred.resolve(data);
}
});
return deferred.promise;
};
这是外部函数
function AjaxFailed(qXHR, textStatus, errorThrown) {
try {
console.error('Ajax-Error in ' + methodName, qXHR.status, qXHR.responseText);
} catch (e) {
console.log("LocalMethod-Error in " + methodName);
console.error(e);
}
finally {
this.deferred.reject(qXHR);
}
}
【问题讨论】:
-
使用已经返回
$q承诺的$http会更有意义。您正在混合承诺库并创建反模式。 jQuery 承诺与您的$q.defer不同
标签: javascript jquery angularjs promise angular-promise