2016-06-06 3 views
1

내 대시 보드에 최고 게시 된 섹션을 추가하려고합니다. Top 'captures'일명 게시물을 얻는 것은 문제가 아니었지만 Auth0로 작업했지만 사용자 정보를 해당 사용자와 연결해야합니다.약속에서 데이터 가져 오기 | Angularjs

app.controller('dashboardCtrl', ['$scope', '$http', 'captureApi', 'userApi', 'filterFilter', '$q', function($scope, $http, captureApi, userApi, filterFilter, $q){ 
    $scope.captures = []; 
    $scope.pageSize = 4; 
    $scope.currentPage = 1; 

    $scope.topPosters = []; 



    captureApi.getAllCaptures().then(function(res) { 
     $scope.captures = res.data; 

     userApi.getUsers().then(function(res){ 

     $scope.getCount = function getCount(strCat){ 
       return filterFilter($scope.captures, {userId:strCat}).length; 
      };  

      var users = res.data.users; 
      var i; 
      for(i=0; i<users.length; i++) { 
       var userId = users[i].user_id; 
       console.log(userId); 
       console.log($scope.getCount(userId)); 

       $scope.user = userApi.getUser(userId).then(function(res){ 
        $scope.userInfo = res.data; 
        console.log($scope.userInfo); 
        return res.data; 
       }); 

       var dataObj = { 
        user : $scope.user, 
        userId : userId, 
        amountPosted : $scope.getCount(userId) 
        }; 

        $scope.topPosters.push(dataObj); 
      } 
      console.log($scope.topPosters[0].user); 
     }); 
    }); 
}]); 
:

현재 나는 내가 문제 데이터를 검색하고 변수 사용자로 퍼팅하는 데 문제가 비동기의 내가 가장 많은 표를 누가 만들 었는지 확인하기 위해 함께 통과 내 dataObj의 약속을 받고 있지만,보고 있어요

보시다시피, 나는 모든 캡처를 얻은 다음 사용자 ID에 따라 계산합니다. 이 작업이 완료되면 dataObj에 추가합니다. 하지만 나는 사용자 정보를 추가하려고하는데 (userApi.getUser(ID)을 사용하고이 정보를이 dataObj에 추가하려고합니다. 현재 약속을 얻고 있습니다.) 어떻게 이것을 각 사용자의 dataObj로 변환합니까?

답변

0

topPosters에 밀어 전에 모든 데이터를로드하려고 예 :.. ...이 마법처럼 일했다

app.controller('dashboardCtrl', ['$scope', '$http', 'captureApi', 'userApi', 'filterFilter', '$q', function ($scope, $http, captureApi, userApi, filterFilter, $q) { 
$scope.captures = []; 
$scope.pageSize = 4; 
$scope.currentPage = 1; 
$scope.topPosters = []; 

$scope.getCount = function getCount(strCat) { 
    return filterFilter($scope.captures, {userId: strCat}).length; 
}; 

$q.all({captures: getAllCaptures(), users: getUsers()}).then(function(collections) { 
    $scope.captures = collections.captures; 
    return collections.users; 
}).then(function (users) { 
    return $q.all(users.map(function (user) { 
     return getUserById(user.userId); 
    })); 
}).then(function (users) { 
    $scope.topPosters = users.map(function(user) { 
     //I think your user has propery "id" or similar 
     return { 
      user: user, 
      userId: user.id, 
      amountPosted: $scope.getCount(user.id) 
     } 
    }); 

    console.log($scope.topPosters); 
}); 

function getAllCaptures() { 
    return captureApi.getAllCaptures().then(function (res) { 
     return res.data; 
    }); 
} 

function getUsers() { 
    return userApi.getUsers().then(function (res) { 
     return res.data.users; 
    }); 
} 

function getUserById(userId) { 
    return userApi.getUser(userId).then(function (res) { 
     return res.data; 
    }); 
} 

}]); 
+0

감사합니다, 나는 더이 메도를 사용하여 적용해야을 –

+0

을 나는 실시간으로 당신과 대화를 나눌 수 있는지 궁금 해서요 약간의 질문을하는 약간을 위해? –

+0

Skype : flamps1. 그러나 나는 자유로운 시간이별로 없다, 나는 일하고있다. –