javascript - 尝试对数据进行分页时出现无限循环
问题描述
我正在尝试对一些数据进行分页。每个查询的结果限制为 300,我可以使用偏移量来获取下一页。我试图用这样的while循环来做到这一点:
async function fetchData (
contractAddress,
tokenID )
{
const url = `https://api.website.io/api/v1/events?asset_contract_address=${contractAddress}&token_id=${tokenID}&offset=0&limit=299`;
logger.log(url);
const data = await internalFetch(url, {
headers: {
'Accept': 'application/json',
'X-Api-Key': API_KEY,
},
method: 'get',
timeout: 10000, // 10 secs
})
var array = data.data.asset_events;
var offset = 0;
var tempResponse = array;
while (tempResponse.length != 0) {
var urlPage = `https://api.website.io/api/v1/events?asset_contract_address=${contractAddress}&token_id=${tokenID}&offset=${offset}&limit=299`;
logger.log(urlPage + " url2");
var nextPage = await internalFetch(urlPage, {
headers: {
'Accept': 'application/json',
'X-Api-Key': API_KEY,
},
method: 'get',
timeout: 10000, // 10 secs
})
tempResponse = nextPage.data.asset_events;
array.concat(tempResponse);
offset = array.length;
logger.log("length " + offset);
}
return array;
}
while 循环中的某些内容无法正常工作并运行无限循环。每次查询的 url 都是相同的 [偏移量为 299],因此返回相同的响应,并且 tempResponse.length 永远不会 == 0,以 while 循环结束。有人可以发现问题吗?
解决方案
就是这一行,您可以在其中设置偏移量:
offset = array.length;
假设有超过两页的结果,这总是会返回相同的数字。第一次你会得到数组长度,然后当你在 fetch 中使用它时,你会得到从 300 开始的结果。
但是该数组也将是 299 长,因此您发送相同的偏移量并再次请求第二页。我认为:
offset += array.length;
应该可以工作,尽管这可能会重复上一次通话中的最后一条记录,在这种情况下,您需要offset += array.length + 1;
.
推荐阅读
- r - 堆积条形图
- c# - Unity,为什么会生成这么多预制件?
- typescript - 如何在Typescript的界面中将联合(或其他)类型设置为强制键名
- websphere-liberty - 为什么用户名没有被添加到开放自由的访问日志中?
- javascript - 无法在 Laravel 中获取数据
- ios - 如何在 ios 中创建客户端库以与 Turn Server 通信?
- php - 上传多个图像时,获取数据库中的文件夹名称
- java - 从 C++ 调用 Java 方法
- reactjs - 如何在 React JS 中使用 D3 在 Force-Directed Graph 中同一组的节点周围创建一个凸包?
- haskell - 如何使用 Haskell 访问树节点的数值