Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

820
Views
NodeJS espera a que finalice el bucle (async / await / promisse)

Estoy tratando de hacer un ciclo para obtener información en una API, primero necesito este ciclo para esperar a que finalice la solicitud y luego continuar con el siguiente valor de matriz, después de que finalice el ciclo, luego necesito que llame a esa función de nuevo cada 5 segundos, pero solo después de que termine la llamada anterior.

Algo como esto:

 let ids = [1, 2]; async function getInfoAPI(ids) { for (const id of ids){ const apiInfo = await fetch(`https://apiurl/${id}`); const infoJSON = await apiInfo.json(); //Do more things here } }

Ahora necesito llamar a la función y esperar a que termine el ciclo. Una vez que se complete el ciclo, espere 5 segundos y vuelva a llamar a la función getInfoFromAPI. Intenté setInterval pero si el bucle, por alguna razón, tarda más de 5 segundos en responder, se volverá a llamar a getInfoFromAPI incluso si no finalizó el bucle anterior.

 setInterval(function(){ getInfoAPI(ids); }, 5000);

¿Hay alguna manera de que pueda hacer eso usando promesas o algo así?

Gracias

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Puedes hacer algo como esto:

 function run() { getInfo(...).then(() => { setTimeout(run, 5000) }); } run().catch(err => { console.log(err); });

O prefiero usar una versión prometida de setTimeout() . En la última versión de nodejs, puede usar timersPromises.setTimeout() y devuelve una promesa:

 import { setTimeout } from 'timers/promises'; async function run() { await getInfo(...) await setTimeout(5000); return run(); } run().catch(err => { console.log(err); });

O use un ciclo while con await :

 import { setTimeout } from 'timers/promises'; async function run() { while (true) { await getInfo(...) await setTimeout(5000); } } run().catch(err => { console.log(err); });
about 4 years ago · Juan Pablo Isaza Report

0

Puede lograr esto importando el setTimeout basado en promesas que se envía con NodeJs 16+ y usándolo de la siguiente manera:

Importar:

 import { setTimeout } from "timers/promises"

Usar:

 while (true) { await getInfoAPI(ids); await setTimeout(5000); }
about 4 years ago · Juan Pablo Isaza Report

0

Usar recursividad:

 async function getInfoPeriodically() { await getInfoAPI(ids); setTimeout(() => { getInfoPeriodically() }, 5000); }

Puede agregar los parámetros para personalizar esta función/pasar valores, pero esta es la idea.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!