2015-11-06 130 views
0

我尝试整理foreach循环后得到的所有数据,但不知何故总是[]AngularJS等待foreach中的所有异步调用完成?

$scope.temp = []; 
    angular.forEach(seasonStageIds, function (seasonStageId, index) { 

     playerService.getPlayerProfile(seasonStageId, $stateParams.params.playerSename).then(function (data) { 

      playerService.getPlayerPositionPerSeason(seasonStageId, data.data.Id).then(function (data) { 
       console.log(data); 
       _.chain(data) 
       .groupBy('Position') 
       .map(function (value, key) { 

        var goals = _.reduce(value, function (memo, num) { 
         return memo + num.Goals; 
        }, 0); 
        var apps = _.reduce(value, function (memo, num) { 

         return memo + num.Apps; 
        }, 0); 
        var assists = _.reduce(value, function (memo, num) { 
         return memo + num.Assist; 
        }, 0); 
        var ratings = _.reduce(value, function (memo, num) { 
         return memo + num.Rating; 
        }, 0); 

        var position = { 
         Position: key, 
         Apps: apps, 
         Assists: assists, 
         Ratings: ratings, 
         Goals: goals       
        };  
        console.log(position);   >> correct data 
        $scope.temp.push(position); 
       }); 
      }); 


     }); 
    }); 


    $q.all($scope.temp).then(function (data) { 
     console.log(data); >> show [] 
    }) 

我做了什么错? 谢谢大家。

回答

0

$q.all仅适用于承诺!即等待所有的承诺完成,然后运行'then'功能。你传递一个数组作为参数。为了得到你想要的,请尝试以下方法:

$scope.temp = []; 
angular.forEach(seasonStageIds, function (seasonStageId, index) { 

    var promise = playerService.getPlayerProfile(seasonStageId, $stateParams.params.playerSename).then(function (data) { 

     return playerService.getPlayerPositionPerSeason(seasonStageId, data.data.Id).then(function (data) { 
      return _.chain(data) 
      .groupBy('Position') 
      .map(function (value, key) { 

       var goals = _.reduce(value, function (memo, num) { 
        return memo + num.Goals; 
       }, 0); 
       var apps = _.reduce(value, function (memo, num) { 

        return memo + num.Apps; 
       }, 0); 
       var assists = _.reduce(value, function (memo, num) { 
        return memo + num.Assist; 
       }, 0); 
       var ratings = _.reduce(value, function (memo, num) { 
        return memo + num.Rating; 
       }, 0); 

       var position = { 
        Position: key, 
        Apps: apps, 
        Assists: assists, 
        Ratings: ratings, 
        Goals: goals       
       };  

       return position; 
      }); 
     }); 
    }); 

    $scope.temp.push(promise); 
}); 


$q.all($scope.temp).then(function (data) { 
    console.log(data); 
}); 

例如, http://jsfiddle.net/HB7LU/19677/

+0

感谢您的帮助。看起来不错。 –

+0

https://jsfiddle.net/HB7LU/19678/不要在你的小提琴中使用'http'外部... –