检查promises的状态,并根据该列表中的项目删除

时间:2016-05-25 12:39:44

标签: angularjs angular-resource

我有一个选定项目列表,需要从服务器中删除这些项目。因此,一旦我从用户那里获得了构造,我就会向服务器发送一系列删除请求并等待它们全部完成。一旦完成,我就用空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')
   };
}])

2 个答案:

答案 0 :(得分:1)

您的onComplete回调会将每个承诺的响应作为数组传递给您,以便您可以使用这些回复来检查状态吗?

另外,AFAIK,状态403将拒绝承诺,不是吗?因此,您的onComplete将需要设置为successerror回调。

这样的事情:

$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循环并传递增量值以确定哪一个已被解析或拒绝。