当使用分页集合时,Angularjs承诺链

时间:2013-11-24 06:48:06

标签: angularjs promise

我正在使用REST API,为GET请求提供分页响应,如下所示:

{count: 43103
previous: null
next: http://ecoengine.berkeley.edu/api/photos/?page=2
results: [json objects....]
}

我想创建一个服务,按照next链接加载所有数据,直到next变为空。我坚持如何在这种情况下链接承诺,并希望任何有关如何进行的帮助(angular / js newbie here)。到目前为止,我的掠夺者来自http://plnkr.co/edit/ySiQLvu9RNrKkQAoDmKh。您可以从控制台消息中看到代码仅从前2页检索数据。谢谢。

1 个答案:

答案 0 :(得分:3)

我尝试使用递归链接promises来解决这个问题。看到我的小提琴

http://plnkr.co/edit/NPh6uQ2DgVuhVxUgHB6h?p=info

基本上在loadData上完成的递归可以获取分页数据。这是实现

var loadData = function(url) {
      var deferred = $q.defer();

      function loadAll() {
        $http.get(url)
           .then(function(d) {
                debugger;
                console.log('private http.get().then()');
                console.log(d);
                aggregateData.value.push(d.data.results);
                if(d.data.next) {
                   url=d.data.next;
                   loadAll();
                }
                else {
                   deferred.resolve(aggregateData.value);
                }
           })
      }
      debugger;
      loadAll();
      return deferred.promise;

 };

我使用了aggregateData数组,但您可以自由使用loadData函数中声明的任何数组。