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

457
Vistas
Limitar un javascript forEach bucle

Tengo algunos bucles forEach de Node.js anidados que están alcanzando los limitadores de velocidad de la API y me gustaría ralentizarlos para que no alcancen el límite de velocidad. Intenté agregar un setTimeout al final del bucle, pero eso no tiene ningún impacto en la velocidad de las solicitudes. Idealmente, podría enviar una solicitud cada 2 segundos. ¿Cómo puedo conseguir esto? Todo en línea parece hablar sobre la limitación de velocidad de una API, pero nada en el lado del envío.

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

0

Para retrasar un bucle, antes que nada, su función debe ser asíncrona .

Luego puede esperar una promesa que se resuelve después de 2 segundos. Tal retraso se puede insertar como una sola línea como esta:

 await new Promise(resolve => setTimeout(resolve, 2000));

...o como una función práctica como:

 const delay = time => new Promise(resolve => setTimeout(resolve, time));

... que luego se puede usar en un bucle como:

 async function fetchEverything() { for (let thing of things) { await fetchThing(thing); await delay(2000); } }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede hacer una extensión genérica en Array que puede insertar un retraso entre cada iteración, querrá hacer que la función sea async para poder esperarla (y, por lo tanto, saber cuándo finaliza).

 Array.prototype.forEachLimited = async function(fn, timeBetweenCallsMs){ const delay = async () => new Promise(resolve => setTimeout(resolve, timeBetweenCallsMs)); for(var i=0;i<this.length;i++){ fn(this[i]); await delay(); } }; (async function(){ var myArr = [1,2,3,4,5]; await myArr.forEachLimited(i => console.log(i), 2000); console.log("Finished"); })();

Algunos pueden fruncir el ceño al agregar esto a Array.prototype , funcionará tan bien como una función normal que toma la matriz como argumento, por lo que es lo mismo sin agregarlo a Array.prototype

 async function forEachLimited(arr, fn, timeBetweenCallsMs) { const delay = async() => new Promise(resolve => setTimeout(resolve, timeBetweenCallsMs)); for (var i = 0; i < arr.length; i++) { fn(arr[i]); await delay(); } }; (async function() { var myArr = [1, 2, 3, 4, 5]; await forEachLimited(myArr, i => console.log(i), 2000); console.log("Finished"); })();

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