Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在不知道计数的情况下从分页API调用获取数据_Javascript_Node.js - Fatal编程技术网

Javascript 在不知道计数的情况下从分页API调用获取数据

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

我必须从支持偏移量和限制的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.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代码,您可能需要它