使用$ q.all

时间:2017-11-20 11:56:48

标签: css angularjs html5 fonts

我正在尝试使用$q在我的页面中调用多个ajax。在所有响应存储在一个数组中之后。但它似乎无法正常工作 -

我的控制器 -

用于循环遍历API中的多个页面并获取json。

        $scope.items = [];
        for (var i = 1; i < 10; i++) {

            var apiURL = "https://swapi.co/api/planets?page =" + i;
            searchData(apiURL).then(function(response) {
                $scope.items.push(response[0].data.results);

            });

        }

        $scope.showDetail = function(data) {
            $scope.items = data.results;

            $scope.items.sort(function(a, b) {
                return a.population.localeCompare(b.population);
            });
        }
        $scope.showDetail($scope.items);

        $scope.highlighFont = function() {

        }

我的工厂 -

var app = angular.module('starApp');

app.factory('searchData', function($q, $http) {

  return function(apiUrl) {

    var promises = [];

    var deffered = $q.defer();

    $http({
        method : 'GET',
        url : apiUrl
    }).then(function(data) {
        deffered.resolve(data);

    }, function(error) {
        deffered.reject();

    })

    promises.push(deffered.promise);

    return $q.all(promises);
  }

 });
如果我做错了,有人可以纠正我吗?

1 个答案:

答案 0 :(得分:0)

您需要在控制器中调用$ q.all()

app.factory('searchData', function($q, $http) {

  return function(apiUrl) {
    return $http({
        method : 'GET',
        url : apiUrl
    });//$http returns a promise 
  }
 });

控制器:

    $scope.promises = [];
            for (var i = 1; i < 10; i++) {
                var apiURL = "https://swapi.co/api/planets?page =" + i;
                    $scope.promises.push(searchData(apiURL));
            }

   $q.all($scope.promises).then(function(results){
       console.log(results);
   });