AngularJS如何连续调用$http以访问更多数据?

AngularJS如何连续调用$http以访问更多数据?,angularjs,angularjs-http,Angularjs,Angularjs Http,对于AngularJS$http服务 如何循环$http调用以访问顺序数据,而每次调用都需要在下一次调用中使用以前的返回数据 我想进行连续的$http请求,这些请求需要上一次调用的返回数据。我正在尝试从Instagram API获取所有追随者。服务器限制返回数据,并提供一个偏移量,以便在需要获取更多数据时进行另一次调用。如果不清楚,请查看页面标题 我的解决方案是可行的,但我认为它丑陋、不安全,必须有更好的方法。我所做的是递归地调用一个执行$http的函数,传入函数本身并在需要时在promise中

对于AngularJS$http服务

如何循环$http调用以访问顺序数据,而每次调用都需要在下一次调用中使用以前的返回数据

我想进行连续的$http请求,这些请求需要上一次调用的返回数据。我正在尝试从Instagram API获取所有追随者。服务器限制返回数据,并提供一个偏移量,以便在需要获取更多数据时进行另一次调用。如果不清楚,请查看页面标题

我的解决方案是可行的,但我认为它丑陋、不安全,必须有更好的方法。我所做的是递归地调用一个执行$http的函数,传入函数本身并在需要时在promise中执行它

所以,我的问题是:有没有其他方法可以做到这一点,而不必在承诺范围内递归调用

这是我的第一篇stackoverflow帖子,所以我很抱歉我的想法组织得太糟糕了

var app = angular.module('instagramApp', ['ngRoute']);

app.controller('FollowsCtrl', ['$scope', 'Instagram', '$http', function($scope, Instagram, $http){

    $scope.follows          = [];
    $scope.follows_count    = 0;

    loadFollows();

    function loadFollows(){
        Instagram.getFollows().then(function(users){
            $scope.follows          = users;
            $scope.follows_count    = users.length;
        });
    }

}]);

//Communicates with Server
app.service('Instagram', ['$http', function($http){

    //Return public API.
    return ({
        getFollows: getFollows
    });

    //Public method
    function getFollows(){
        return _getFollows(_getFollows, '', []);
    }

    //Recursive private method
    function _getFollows(callback_fn, cursor, users){
        var base = 'https://api.instagram.com/v1/users/12345678910/follows';
        var access_token = '?access_token=PUT_ACCESS_TOKEN_HERE=JSON_CALLBACK';
        var url = base + access_token + cursor;

        return $http.jsonp(url).then(

            //success
            function(result){

                //add follow users from server to array
                users = users.concat(result.data.data);

                //check if more data needs to be retrieved from the server
                if(result.data.pagination.next_cursor)
                {
                    cursor = '&cursor=' + result.data.pagination.next_cursor;

                    //TODO: call again if more data to retrieve
                    return callback_fn(callback_fn, cursor, users);
                }
                //all data fetched, return it
                else
                {
                    return users;
                }
            }, 

            //error
            function(result){
                console.log('error');
            });
    };

}]);

不,如果您需要使用承诺对类似的东西进行连续http调用,那么这是正确的。干得好。@dherman谢谢你的反馈!