Javascript 在不知道计数的情况下从分页API调用获取数据
我必须从支持偏移量和限制的API获取所有数据,但我不知道计数或最大偏移量 我使用while true,并在调用不返回数据时中断循环Javascript 在不知道计数的情况下从分页API调用获取数据,javascript,node.js,Javascript,Node.js,我必须从支持偏移量和限制的API获取所有数据,但我不知道计数或最大偏移量 我使用while true,并在调用不返回数据时中断循环 let flag = true; let query_obj = {limit : 10, offset: 0}; while (flag) { const data = await axios.get('https://domain.ex/path?limit=' + query_obj.limit + 'offset=' + query_obj.offs
let flag = true;
let query_obj = {limit : 10, offset: 0};
while (flag) {
const data = await axios.get('https://domain.ex/path?limit=' + query_obj.limit + 'offset=' + query_obj.offset);
query_obj.offset += query_obj.limit;
if(data.items.length === 0){
flag = false;
}
}
我在寻找最佳实践,所以我认为while-loop和wait-in-a-loop不是最好的
我正在考虑使用promise.all或RXJS的解决方案,你有什么建议吗
谢谢我认为你的方法是正确的。您可以通过并行运行多个请求对其进行一些优化。但这可能会导致对后端的无用调用
let flag=true;
让query_obj={limit:10,offset:0,parallel:5};
while(旗帜){
const waitAll=range(query_obj.parallel).map((idx)=>axios.get('https://domain.ex/path?limit=' +
query_obj.limit+'offset='+(query_obj.offset+idx*query_obj.limit)))
const results=Promise.all(waitAll);
flag=results.filter(数据=>data.items.length==0);
query_obj.offset+=query_obj.limit*query_obj.parallel;
}
这5个请求并行检索数据,应用程序在处理结果之前等待所有请求。因此,对于这5个请求,您只需等待最长的请求。这可能会稍微提高性能。但是如前所述,如果总结果只有10项,那么您正在执行4个无用的请求,所有请求都返回零项
range
是lodash提供的一个助手函数,它只创建了一个包含5项的数组。您已经在使用Promissions了,这是一个很好的方法,就像我以前的答案一样,如果您翻译jquery代码,您可能需要它