[英]AngularJS rejected promise is not calling onRejection for $q.all()
所以我有这段代码:
var deferred = $q.defer();
var promises = [];
angular.forEach($scope.devices, function(device){
var promise = memberService.InsertDevice(memberId, device).then(function (data) {
//device inserted
}, function (rejectData) {
if (rejectData.Error == "Cannot insert record since it already exists") {
alert("The number " + device.PhoneNumber + " already exists. Try with a different number.");
}
});
promises.push(promise);
});
$q.all(promises).then(function (data) {
//perform something on Success
}, function (data) {
//perform something on rejection
//THIS NEVER GETS CALLED EVEN IF I GET THE ALERT FROM THE TOP
});
看看最后的评论。 出于某种原因,即使我得到警报(这意味着其中一个呼叫出现问题),也永远不会调用整体拒绝。
承诺为您提供了在失败时“恢复”的机会,因此您必须在错误句柄中返回拒绝,以使$q.all
知道它确实失败了。 以下代码中唯一的增量是return $q.reject(rejectData);
var deferred = $q.defer();
var promises = [];
angular.forEach($scope.devices, function(device){
var promise = memberService.InsertDevice(memberId, device).then(function (data) {
//device inserted
}, function (rejectData) {
if (rejectData.Error == "Cannot insert record since it already exists") {
alert("The number " + device.PhoneNumber + " already exists. Try with a different number.");
}
return $q.reject(rejectData);
});
promises.push(promise);
});
$q.all(promises).then(function (data) {
//perform something on Success
}, function (data) {
//perform something on rejection
//THIS NEVER GETS CALLED EVEN IF I GET THE ALERT FROM THE TOP
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.