Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

133
Vistas
recuperar recursivamente todas las páginas de api

Estoy tratando de obtener todos los registros de una API remota que tiene una limitación sobre cuántos se pueden obtener a la vez. Estoy tratando de usar la recursión, pero la idea general de lo que funciona en Python no puedo trabajar también en JS.

Esto es lo que estoy haciendo actualmente, y obtendrá 100 registros, pero luego continúa en segundo plano. He intentado muchas formas diferentes de hacerlo y nada parece funcionar como se esperaba.

Cualquier ayuda sería genial, gracias.

 async getBooks(offset = 0) { return await bookGenie.find( 'fiction', 100, offset, ) }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Sugiero este:

 async function getBooks(offset = 0, result = []) { try { // get new page const page = await bookGenie.find( 'fiction', 100, offset, ); // add page to result array result = result.concat(page); // check is this the end if (page.length !== 100) { // or what condition do you need // return result array return result; } else { // or increase offset and continue processing return getBooks(offset + 100, result); } } catch (err) { throw err; // or handling somehow } }

Ahora getBook recursivo devuelve la promesa con todos los registros encontrados combinados en una matriz en la resolución y arroja un error en el rechazo.
Todas las solicitudes se ejecutarán una por una, aumentando el desplazamiento en 100 en cada paso hasta que la solicitud devuelva menos de 100 registros (página no completa = final de la lista).

Uso:

 const list = await getBooks(); console.log(list); // [ ... ] // List of all records

Extra: mismo método pero compacto

 async function getBooks(offset = 0, result = []) { try { const page = await bookGenie.find('fiction', 100, offset); return page.length !== 100 ? result.concat(page) : getBooks(offset + 100, result.concat(page)); } catch (err) { throw err; // or handling somehow } }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Su llamada await getBooks() :

 getBooks((offset = offset += 100))

probablemente debería escribirse como:

 getBooks((offset += 100))

Y la declaración if anterior me parece incorrecta. Tal vez intente:

 if (result.length < 1000) { // will continue until result.length is 1000 result.push(await getBooks(offset += 1)); /* + 1 so the .push will add one element to the array each time. + 100 may work too */ }

En realidad, no pude probar esto, pero esto (o algo similar a esto) es más convencional para JS. Aquí hay un enlace que podría ayudarlo https://www.javascripttutorial.net/javascript-recursive-function/

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda