Javascript 链接N AngularJS承诺

Javascript 链接N AngularJS承诺,javascript,angularjs,angular-promise,Javascript,Angularjs,Angular Promise,我已经为控制器编写了保存代码。工作量是可变的,可以是删除、添加或编辑操作。我希望他们按照特定的顺序来完成,所以我想,以某种方式,创建一个承诺链,在每个动作之后进行另一个动作,即 按顺序处理所有delete操作 按顺序处理所有添加操作 按顺序处理所有edit操作 目前我的代码如下所示 // Save deleted groups first angular.forEach(listOfDeletedGroups, $scope.saveGroupDelete); // Now save adde

我已经为控制器编写了保存代码。工作量是可变的,可以是
删除
添加
编辑
操作。我希望他们按照特定的顺序来完成,所以我想,以某种方式,创建一个承诺链,在每个动作之后进行另一个动作,即

  • 按顺序处理所有
    delete
    操作
  • 按顺序处理所有
    添加
    操作
  • 按顺序处理所有
    edit
    操作
  • 目前我的代码如下所示

    // Save deleted groups first
    angular.forEach(listOfDeletedGroups, $scope.saveGroupDelete);
    
    // Now save added groups
    angular.forEach(listOfAddedGroups, $scope.saveGroupAdd);
    
    // Now save any edits
    angular.forEach(listOfChangedGroups, $scope.saveGroupEdits);
    
    我的保存方法都非常相似,如下所示:

    $scope.saveGroupDelete = function (group) {
        groupAPIService.deleteGroup(group)
            .success(function () {
            })
            .error(function () {
                $scope.savingInfo.numErrors++;
            })
            .finally(function () {
                $scope.savingActionComplete(group);
            });
    };
    
    我知道我可以使用
    $q
    使这些函数返回我可以与
    一起使用的承诺


    但我不知道如何将这些请求串联起来,以确保它们按顺序发生,一个接一个地实现N个承诺。

    有帮助吗?看起来很棒。链是立即开始执行还是我必须以某种方式执行?它立即开始运行。将其包装在函数中,并在必要时调用它。
    $scope.saveGroupDelete = function (group) {
        var deferred = $q.defer();
    
        groupAPIService.deleteGroup(group)
            .success(function () {
            })
            .error(function () {
                $scope.savingInfo.numErrors++;
            })
            .finally(function () {
                $scope.savingActionComplete(group);
                deferred.resolve();
            });
    
        return deferred.promise;
    };