Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对于使用角度服务的循环,请等到完成后再转到下一页_Javascript_Angularjs_For Loop - Fatal编程技术网

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

Javascript 对于使用角度服务的循环,请等到完成后再转到下一页,javascript,angularjs,for-loop,Javascript,Angularjs,For Loop,我正在使用“for”循环调用一个服务,并希望等到完成后再转到下一页(路由),因此数据在加载之前就已经存在,我不确定如何执行 以下是我的服务: .service("OrdersService", function($http, $rootScope, $location) { var getData = {}; getData.eachOrder = function(id){ var url = '/service/rest/orders'; r

我正在使用“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');  
}; 
$scope.viewDetails=函数(数据){
对于(变量i=0;i<$scope.checkedds.length;i++){
如果($scope.checkedds[i]){
OrdersService.eachOrder(i);
}
}  
//在这里,我想等到循环完成后再更改位置
$location.path('/details');
}; 
checkedds包含和数组或数字。)


谢谢你的帮助。我是Angular的新手,所以我很乐意为您提供有关如何更好地执行此代码的任何提示。

OrderService。每个horder
返回一个,因此您可以等待他们全部使用完
$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');  
});
var承诺=[];
对于(变量i=0;i<$scope.checkedds.length;i++){
如果($scope.checkedds[i]){
promises.push(OrdersService.eachOrder(i));
}
}  
$q.all(承诺)。然后(函数(){
$location.path('/details');
});

效果非常好,非常感谢您的帮助。