Angularjs 在Angular中处理forEach Ajax调用的正确方法
我需要使用for循环更新数组中每个对象的数据,一旦捕获了所有数据,就运行一个函数。我不想将jQuery与此混合,并以正确的角度进行操作 这就是我正在做的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
$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
将获取阵列,但它将立即得到解决。我希望这不会给阅读前几条评论的人带来无声的麻烦。对不起,我的大脑放屁了。。。