Soy nuevo en node.js y estoy tratando de obtener una clave de página inicial de un encabezado de respuesta de API y recorrer las páginas hasta que el encabezado de clave de página ya no exista, lo que significa que llegué a la última página y el ciclo puede terminar.
Por alguna razón, pageKey nunca recibe cambios en el ciclo while de la forma en que lo configuré:
async function doThis() { let gotAllPages = false; let pageKey; var response = await got(url, options); try { pageKey = response.headers['next-page']; } catch (e) { gotAllPages = true; } while (!gotAllPages) { var pageOptions = { method: 'GET', headers: { Authorization: `xxx`, nextPage: pageKey } }; response = await got(url, pageOptions); try { pageKey = response.headers['next-page']; console.log(pageKey); } catch (e) { console.log("No header value found, loop is done."); gotAllPages = true; break; } } }Esto termina entrando en un bucle infinito porque la clave de página nunca cambia desde la primera respuesta, por lo que sigue intentando obtener la misma página.
Siendo nuevo en Node.js, realmente no entiendo si hay un problema de alcance con la forma en que configuré las variables o qué, ¡así que agradecería cualquier consejo!
Los bloques Try-catch no fallan al configurar una variable como indefinida o nula. En lugar de usar un bloque try-catch, use una declaración if.
pageKey = response.headers['next-page']; if (!pageKey) { console.log("No header value found, loop is done."); gotAllPages = true; break; }La clave de acceso response.headers['next-page']; no arroja nada, por lo que la captura donde se establece gotAllPages nunca se ejecuta.
Podemos arreglar esto, y ordenar un poco...
async function getAllPages() { let results = []; let nextPage = 0; let options = { method: 'GET', headers: { Authorization: `xxx` } }; while (nextPage !== undefined) { options.headers.nextPage = nextPage; let response = await got(url, options); results.push(response); nextPage = response.headers['next-page']; } return result; } Esto supone un par de cosas: (1) que la API espera nextPage === 0 en la primera solicitud, (2) que la API indica que no hay más páginas dejando el encabezado next-page undefined , (3) que la persona que llama quiere la respuesta completa, en lugar de una parte como response.data o response.body , (4) que la persona que llama detecta los errores arrojados aquí y los maneja.