Angularjs Angular$q.all()将上一个操作与当前操作相结合

Angularjs Angular$q.all()将上一个操作与当前操作相结合,angularjs,q,Angularjs,Q,因为代码太复杂,我只能粘贴代码的结构: angular.module('xxx').controller('xxxCtrl', ['$scope', ..., '$q', function($scope, ..., $q){ ... //every checked unchecked event in multi-checkbox trigger the change in measurement $scope.$watch('measurement', functio

因为代码太复杂,我只能粘贴代码的结构:

angular.module('xxx').controller('xxxCtrl', ['$scope', ..., '$q', function($scope, ..., $q){
    ...

    //every checked unchecked event in multi-checkbox trigger the change in measurement
    $scope.$watch('measurement', function (newValue, oldValue) {

        pendingRequests = {
                    primary: $q.defer(),
                    ...: $q.defer()
                };

        var promises = _.map(pendingRequests, function (deferred) {
                return deferred.promise;
            });

        $q.all(promises).then(function (results) {

            $scope.data = results[0];
            $window.console.log($scope.data);


        });

        //Here i have a $http request to server
        ResultService.requestResultsOnce();
    });

}])
场景是这样的,页面上有多个复选框,对多个复选框的每次更改都会触发watch方法

如果我以正常速度单击复选框,它将非常有效

但是,如果我以非常快的速度单击两个复选框,回调就会出现

$q.all(promises).then
将只调用一次

有人能帮忙吗

实际上,每$http success回调正确执行2次,为什么then方法只执行1次


似乎$q.all将上一次请求与新的单击请求结合起来。

因为随着逻辑的实现。。所有未决承诺都放入承诺数组。@pankajparkar我不明白,为什么我慢慢单击两个复选框,它工作得很好。你有什么解决办法吗?