AngularJS - 如何在嵌套的http.get请求中返回对象

时间:2015-02-17 09:33:42

标签: angularjs http get angularjs-service angular-promise

我对AngularJS有一个问题是,我无法在$ http.get方法中为外部变量赋值。这是我的代码片段:

.factory('MediaService',['$http', function($http, $q){
    return {
        getGalleryIds : function() {
            galeriURL = 'http://api.tika.gov.tr/www/tr/galleries?';
            return $http.get(galeriURL, { cache: true}).then(function(response){
                contentIdList = response.data.data;
                var contentList = [];
                for (i=0;i<contentIdList.length;i++) {
                    var galeriContentURL = 'http://api.tika.gov.tr/www/tr/galleries/' + contentIdList[i].id;
                    contentList[i] = $http.get(galeriContentURL, { cache: true})
                        .then(function(response){
                            return response.data;
                        });
                }
                console.log(contentList);
                return contentList;
            });
        }
    }
}]);

我的问题出在 console.log(contentList); 第一行 Promise Array ,因为我无法为外部变量赋值。

[Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise]

如何为 for loop $$ http.get console.log(contentList)中的 var contentList = []; 变量赋值; 获取对象数组,如下所示

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]

1 个答案:

答案 0 :(得分:0)

问题出在这一部分:

contentList[i] = $http.get(galeriContentURL, { cache: true})
                        .then(function(response){
                            return response.data;
                        });
  

$http会返回您promise中存储的contentList   当你在成功中使用return时,数组,而不是数据   功能,数据不会返回到内容列表。

<小时/> 您需要用以下代码替换该代码:

 $http.get(galeriContentURL, { cache: true})
                        .then(function(response){
                            contentList[i] = response.data;
                        });
  

这并不能保证所有数据对象都存储在其中   数组的顺序与它们的顺序相同   请求。