Angularjs 在Angular中处理forEach Ajax调用的正确方法

Angularjs 在Angular中处理forEach Ajax调用的正确方法,angularjs,Angularjs,我需要使用for循环更新数组中每个对象的数据,一旦捕获了所有数据,就运行一个函数。我不想将jQuery与此混合,并以正确的角度进行操作 这就是我正在做的 $scope.units = ['u1', 'u2', 'u3']; $scope.data = null; //get individual unit data $scope.getUnitData = function(unit){ service.getUnitData(unit).succ

我需要使用for循环更新数组中每个对象的数据,一旦捕获了所有数据,就运行一个函数。我不想将jQuery与此混合,并以正确的角度进行操作

这就是我正在做的

    $scope.units = ['u1', 'u2', 'u3'];
    $scope.data = null;
    //get individual unit data
    $scope.getUnitData = function(unit){
        service.getUnitData(unit).success(function(response){
             $scope.data.push({'id' : response.id , 'value' : response.value});
        });
    };

    $scope.updateAllUnits = function(){
    $scope.data = null ; //remove existing data
    angular.forEach($scope.units,function(val,key){
      $scope.getUnitData(val);
    };
    console.log($scope.data); // Need to show all the data but currently it does not as the for    each loop didn't complete
    };
该服务定义为

app.factory('service',function($http){
     return {
        getUnitData : function(unit){
        return $http({
            url : myURL,
            method : 'GET',
            params : {'unit' : unit}
            });
        }

     }

});

在for循环中完成所有拉取后,如何接收回调?

调用
$http(…)
的结果是一个承诺。这意味着您可以使用等待它们的数组完成

$scope.updateAllUnits = function(){
    $scope.data = null ; //remove existing data
    var promises = [];
    angular.forEach($scope.units,function(val,key){
      promises.push($scope.getUnitData(val));
    });
    $q.all(promises).then(function success(data){
      console.log($scope.data); // Should all be here
    }, function failure(err){
      // Can handle this is we want
    });
};

承诺
在您的代码中只是一个数组。$q是如何知道这个数组拥有所有对象的?我们正在同步的
forEach
中向它注入承诺。当我们调用
$q.When
时,承诺已创建,但未解决(仍有来自服务器的数据)。
$q.when
等待这一切完成。当我意识到
$http
已经返回了一个承诺时,我已经删除了这个答案的很大一部分。非常抱歉,我的意思是
$q.all
!我会纠正的,没有先思考就不要再打字了,安迪!我会检查它是否有效。尽管知道
$q.when
接受一系列承诺是件好事。文档中没有提到这一点。我认为
$q.when
将获取阵列,但它将立即得到解决。我希望这不会给阅读前几条评论的人带来无声的麻烦。对不起,我的大脑放屁了。。。