2015-11-06 139 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'外部... –