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

289
Vistas
¿Cómo hacer un ciclo js puro de devoluciones de llamada?

Tengo una API desde la que necesito consultar N páginas de datos. Como no quiero sobrecargar la API, quiero hacerlo secuencialmente y sin bloquear el hilo principal.

El código sería algo como esto:

 var res = []; // all data from api var totalPages = 10; var pageSize = 100; for (let page = 0; page < totalPages; page++) { // load using jQuery ajax request $.get('api.php', { page: page, page_size: pageSize }, function(result) { res.push(...result); // add data to resulting array }); }

Pero este enfoque tiene algunos problemas:

  1. Como es asíncrono, solo ejecutará todas las solicitudes en paralelo, sobrecargando la API como resultado. Necesito que sigan ejecutándose de forma asíncrona, pero cada uno debería ejecutarse solo cuando finalice el anterior.
  2. Dado que todas las llamadas son asíncronas, al final del ciclo aún no tendríamos los datos solicitados; se cargarán en segundo plano. De alguna manera, debemos esperar a que se realicen todas las devoluciones de llamada antes de devolver res a algún otro código que lo necesite.
  3. No hay forma de hacer que cada devolución de llamada pase su resultado a la siguiente devolución de llamada y es la única forma de detener la carga cuando alguna devolución de llamada recibe la solicitud "dejar de cargar"/"no más datos" del servidor

¿Hay alguna manera de solucionar estos problemas sin usar algunas bibliotecas secundarias o promesas? Simplemente viejo javascript de vainilla. Lo siento si algo no está claro, no tengo mucha experiencia en js

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puedes usar una recursividad simple aquí, como esta:

 var res = []; // all data from api var totalPages = 10; var pageSize = 100; const loader = page => { // load using jQuery ajax request $.get('api.php', { page: page, page_size: pageSize }, function(result) { res.push(...result); // add data to resulting array if (page < totalPages) loader(++page) else console.log('DONE!'); }); } loader(0);
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