首页 > 解决方案 > 尝试对数据进行分页时出现无限循环

问题描述

我正在尝试对一些数据进行分页。每个查询的结果限制为 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 循环结束。有人可以发现问题吗?

标签: javascript

解决方案


就是这一行,您可以在其中设置偏移量:

offset = array.length;

假设有超过两页的结果,这总是会返回相同的数字。第一次你会得到数组长度,然后当你在 fetch 中使用它时,你会得到从 300 开始的结果。

但是该数组也将是 299 长,因此您发送相同的偏移量并再次请求第二页。我认为:

offset += array.length;

应该可以工作,尽管这可能会重复上一次通话中的最后一条记录,在这种情况下,您需要offset += array.length + 1;.


推荐阅读