对于使用Angular服务的循环,请等到完成后再转到下一页

时间:2015-04-24 07:12:51

标签: javascript angularjs for-loop

我正在使用“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很新,所以我很乐意接受有关如何更好地完成此代码的任何提示。

1 个答案:

答案 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');  
});