我正在使用“for”循环调用服务,并希望等到我完成之后再转到下一页(路由),所以数据在加载之前都存在,我不知道如何做到这一点。
以下是我的服务:
.service("OrdersService", function($http, $rootScope, $location) {
var getData = {};
getData.eachOrder = function(id){
var url = '/service/rest/orders';
return $http.get(url+'/'+id)
.success(function(data) {
getData.allOrders(data);
}).
error(function (data, status, headers, config) {
console.error('Error fetching feed:', status, headers, config);
});
};
getData.allOrders = function(data){
$rootScope.ordersTotal = $rootScope.ordersTotal || [];
$rootScope.ordersTotal.push(data);
};
});
这是我的for循环
$scope.viewDetails = function(data){
for(var i = 0; i < $scope.checkedIds.length; i++){
if($scope.checkedIds[i]){
OrdersService.eachOrder(i);
}
}
// here's where I'd like to wait until loop finished before changing location
$location.path('/details');
};
( checkedIds 包含数组或数字。)
感谢您的帮助。我对Angular很新,所以我很乐意接受有关如何更好地完成此代码的任何提示。
答案 0 :(得分:5)
OrderService.eachOrder
返回promise,因此您可以等待所有人使用$q.all
完成:
var promises = [];
for(var i = 0; i < $scope.checkedIds.length; i++){
if($scope.checkedIds[i]){
promises.push(OrdersService.eachOrder(i));
}
}
$q.all(promises).then(function() {
$location.path('/details');
});