Estoy tratando de paginar algunos datos. El límite de resultados por consulta es 300 y puedo usar un desplazamiento para pasar a la página siguiente. Estoy intentando hacer esto con un ciclo while así:
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; }Algo en el ciclo while no funciona correctamente y ejecuta un ciclo infinito. La URL que se consulta es la misma cada vez [con el desplazamiento en 299], por lo que se devuelve la misma respuesta y tempResponse.length nunca es == 0, terminando con un bucle while. ¿Alguien puede detectar el problema?
Es esta línea, donde establece el desplazamiento:
offset = array.length;Esto siempre devolverá el mismo número, suponiendo que haya más de dos páginas de resultados. La primera vez obtendrá la longitud de la matriz, y luego, cuando la use en la búsqueda, obtendrá los resultados a partir de 300.
Pero esa matriz también tendrá una longitud de 299, por lo que envía el mismo número de desplazamiento y solicita la segunda página nuevamente. Pienso:
offset += array.length; debería funcionar, aunque esto puede repetir el último registro de la llamada anterior, en cuyo caso desearía offset += array.length + 1; .