我正在使用一个 REST api,它为 GET 请求提供分页响应,如下所示:
{count: 43103
previous: null
next: http://ecoengine.berkeley.edu/api/photos/?page=2
results: [json objects....]
}
我想通过关注
next
创建一个加载所有数据的服务。链接至 next
变为空。我被困在如何在这种情况下链接 promise ,并希望获得有关如何进行的任何帮助(此处为 angular/js 新手)。到目前为止,我的 plunker 在这里 http://plnkr.co/edit/ySiQLvu9RNrKkQAoDmKh .您可以从控制台消息中看到代码仅从前 2 页检索数据。谢谢你。
最佳答案
我尝试使用递归来链接 promise 来解决这种情况。在这里查看我的 fiddle
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 函数中声明的任何数组。
关于使用分页集合时的 Angularjs promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171928/