从承诺中检索数据 | Angularjs

Retrieving data from promise | Angularjs

我正在尝试在我的仪表板上添加一个热门发布部分。获得顶级 'captures' aka 帖子不是问题,尽管使用 Auth0,我需要 link 用户信息与相应的用户。

目前,我在我的 dataObj 中得到了一个承诺,我传递它来检查谁获得了最多的选票,但是看到它是异步的,我在检索数据并将其放入用户变量时遇到了问题:

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);
        });
    });
}]);

如您所见,我获得了所有捕获,然后根据它们的用户 ID 对它们进行计数。 完成后,我将它们添加到 dataObj。 但在这两者之间,我试图添加用户信息(使用 userApi.getUser(ID) 并将他们的信息添加到此 dataObj。目前我得到了承诺。如何将其转换为每个用户的 dataObj。

尝试在推送到 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;
    });
}

}]);