我有一个应用程序在jive中调用api后自动将数据插入mongodb,我的问题是响应是分页的。
var getAPICall=function(apiLink){
console.log(apiLink);
var response = HTTP.get(apiLink, {
headers: {
Authorization: getAPIToken()
}
});
return response;
}
var getAPIToken = function(){
var token = HTTP.post("https://api.jivesoftware.com/analytics/v1/auth/login?clientId=fakeclientid.i&clientSecret=fakesecret.s");
//console.log(token);
return token.content;
}
响应看起来像这样。
{"paging":{"next":"https://cloudalytics-api-phx.prod.jivehosted.com:443/analytics/v2/export/activity/lastday?startIndex=100&count=100&show-all=true","itemsPerPage":100,"totalCount":164406,"currentPage":1,"totalPages":1645}, list: [{....}]}
包含next
,currentPage
和totalPage
字段
我计划为next
页面功能执行循环,并在totalPage
等于currentPage
我这样做
var res = getAPICall(baseline);
_.each(res.data.list, function(item) {
console.log(item.uuid);
Reports.upsert({"uuid":item.uuid},{$set :item});
});
var totalPage = res.data.paging.totalPage;
for(var current = res.data.paging.currentPage ; current <= totalPage ;) {
var res = getAPICall(res.data.paging.next );
_.each(res.data.list, function(item) {
console.log(item.uuid);
Reports.upsert({"uuid":item.uuid},{$set :item});
});
}
但此语句仅运行到具有无限循环的下一页。我可以通过功能方法更好地做到这一点吗?
我在javascript中的新内容请锤击我。
谢谢!
答案 0 :(得分:0)
使用递归时这应该非常简单。
var myFunction = function(baseline){
var res = getAPICall(baseline);
_.each(res.data.list, function(item) {
console.log(item.uuid);
Reports.upsert({"uuid":item.uuid},{$set :item});
});
if (res.data.paging.currentPage != res.data.paging.totalPage) {
myFunction(res.data.paging.next)
}
}
myFunction(baseline);