Javascript 使用Vue和AXIOS从API循环构建阵列
我有一个NIH API,一次只能调用50页。以下代码适用于50个项目的第一页Javascript 使用Vue和AXIOS从API循环构建阵列,javascript,vue.js,Javascript,Vue.js,我有一个NIH API,一次只能调用50页。以下代码适用于50个项目的第一页 loadNIH() { let offset = 0; axios({ method: "GET", url: "https://api.federalreporter.nih.gov/v1/projects/search?query=orgName:Medical University of South Carolina$fy:2016$&a
loadNIH() {
let offset = 0;
axios({
method: "GET",
url:
"https://api.federalreporter.nih.gov/v1/projects/search?query=orgName:Medical University of South Carolina$fy:2016$&offset=" + offset +"&limit=50"
})
.then(res => {
this.NIHData = res.data.items;
})
.catch(function(error) {
console.log(error);
});
},
我需要循环所有页面,直到获得所有数据。每次偏移量需要增加此调用中接收(请求50)的页数9页。我需要它向this.NIHData的数组添加数据。我有一个工作,所以我需要一些帮助创建循环
提前感谢您应该反复调用API,直到得到一个空的结果集。这可以通过
setTimeout()的帮助轻松实现。
您不能将
偏移量
移出函数,在函数中使用offset+=50
并从成功路径中调用loadNIH()
?(直到满足条件)谢谢你的建议,但问题是打多少次电话?答案在第一个结果集上,直到最后一个结果集,你才知道何时退出。数字9根据查询而变化。在fetchPages中的this.fetchPages出现之前,它工作得很好。然后axios抛出一个错误,称为Uncaught TypeError:无法读取未定义的setTimeout的属性“offset”(this.fetchPages(args),2);它的循环非常好,但是现在我在这个.NIHData.push(res.data.items)中得到了一个错误;of无法读取undefined“的属性'NIHData',但是如果我将其更改为this.NIHData=res.data.items;我会看到数据加载到每个页面,直到出现空响应。但是this.NIHData=this.NIHData.concat(res.data.items);工作正常
loadNIH() {
let params =
{
offset: 0
}
this.NIHData = [];
this.fetchPages(params);
},
fetchPages(args)
{
axios.get("https://api.federalreporter.nih.gov/v1/projects/search?query=orgName:Medical University of South Carolina$fy:2016$&offset=" + args.offset +"&limit=50"
)
.then(res => {
this.NIHData.push(res.data.items);
args.offset += res.data.items.length;
if (res.data.items.length > 0) setTimeout(this.fetchPages, 2);
})
.catch(function(error) {
console.log(error);
});
}