我有一个选定项目列表,需要从服务器中删除这些项目。因此,一旦我从用户那里获得了构造,我就会向服务器发送一系列删除请求并等待它们全部完成。一旦完成,我就用空arrray重新分配$scope.selected
。
但我需要的是基于每个删除请求统计信息,我想从$scope.selected
中删除该项目。
我,e
如果第一个请求状态为200,请从列表中删除234
并
如果第二个请求状态为403,请不要将其从列表中删除。
如果收到任何其他请求状态,我必须调用函数ReportError()
这样做的最佳方式是什么?
$scope.selected = [234, 455, 667];
$mdDialog.show(confirm).then(function() {
var promises = [];
angular.forEach($scope.selected, function(id, index){
var promise = $itemResource.item.remove({id: id}).$promise;
promises.push(promise);
});
$q.all(promises).then(onComplete);
});
function onComplete() {
$scope.selected = [];
$scope.getItems();
$mdDialog.hide();
}
// $itemResouce
angular.module('app').factory('$itemResource', ['$resource', function ($resource) {
return {
item: $resource('/manage/items')
};
}])
答案 0 :(得分:1)
您的onComplete
回调会将每个承诺的响应作为数组传递给您,以便您可以使用这些回复来检查状态吗?
另外,AFAIK,状态403将拒绝承诺,不是吗?因此,您的onComplete将需要设置为success
和error
回调。
这样的事情:
$mdDialog.show(confirm).then(function() {
...
$q.all(promises).then(onComplete, onComplete);
});
function onComplete(promises) {
angular.forEach(promises, ...); // Check status, alter selected-array
$scope.getItems();
$mdDialog.hide();
}
答案 1 :(得分:0)
q库有一个allSettled方法,在Angular中没有实现。您可以添加angular-promise-extras但是,这会给您做出结论和拒绝。您还可以编写for循环并传递增量值以确定哪一个已被解析或拒绝。