I wrote this code that makes multiple $http calls recursively and save all the promises it returns in a array. Then I resolve all of them and save the response in another array.
My question is: How can I return this last array to my controller?
Here some code
My controller:
app.controller('searchCtrl', function($scope, $http, $q, Data, RankServices) {
    $scope.imagesData = [];
    $scope.getImages = function(userId){
        //RankServices.getImages is my factory
        $scope.imagesData = RankServices.getImages(userId, undefined);
    }
}
I made a Factory just to handle the $http requests:
app.factory('Data', function ($http, $q) {
  return {
    ajaxItems: function (url) {
      var deferred = $q.defer();
      $http.jsonp(url)
        .success(function (data, status, headers, config) {
          deferred.resolve(data);
        }).error(function (data, status, headers, config) {
          deferred.reject(data);
        });
      return deferred.promise;
    }
  }
});
And this is the main factory that uses the previous factory to perform $http call and save all promises in an array, resolve then and save data:
app.factory('RankServices', ['Data', '$q', function(Data, $q){
    var imagesDataPromises = [];
    var imagesData = [];
    return {
        getImages: function(userId, url){
          var self = this;
          if(url == undefined)
          var url = "http://www.exemple.com/getImages"+"&callback=JSON_CALLBACK";
          imagesDataPromises.push(Data.ajaxItems(url));
          Data.ajaxItems(url).then(function(response){
            if(response.pagination.next_url != undefined){
              //next_url comes inside the json it returned
              var next_url = response.pagination.next_url+"&callback=JSON_CALLBACK";
              self.getImages(userId, next_url);
            }
            else {
              return self.saveImages(imagesDataPromises)
            }
          });
        },
        saveImages: function(promisesArray) {
          var self = this;
          $q.all(promisesArray).then(function success(data){
            _.each(data, function(elem){
              //save on array only the data I want to
              imagesData.push(elem.data);
            });
            //imagesData is the array I want to return to the Controller
            return imagesData;
          });
        }
    }
}
 
    