我正在尝试对一些数据进行分页。每个查询的结果限制为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;
。