检查承诺的状态并根据该状态从列表中删除该项目

Check the status of promises and based on that remove the item from list

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

q 库有一个在 Angular 中没有实现的 allSettled 方法。您可以添加 angular-promise-extras 但是,这会给出您的解决方案并拒绝。您还可以编写一个 for 循环并传递一个增量值以确定哪个已被解决或拒绝。

您的 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();
}