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

138
Vistas
Agregue demora entre cada elemento en una matriz al recorrer la matriz

Tengo una función asíncrona que se llama que se repite en una matriz y llama a una función para cada elemento.

En este ejemplo, la función llega a un punto final de la API y necesito esperar a que finalice un elemento antes de pasar al siguiente.

Sin embargo, lo que sucede actualmente es que se llama a cada función aproximadamente al mismo tiempo, lo que está causando problemas en la respuesta de la API. Entonces necesito esperar 1 segundo entre cada solicitud.

Esto es lo que tengo actualmente

 const delayedLoop = async () => { const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); const myAsyncFunc = async (i) => { console.log(`item ${i}`); await delay(0); return true; }; const arr = ['one', 'two', 'three']; const promises = arr.map( (_, i) => new Promise((resolve) => setTimeout(async () => { await myAsyncFunc(i); resolve(true); }, 1000), ), ); return Promise.all(promises); } const myFunc = async () => { console.log('START'); await delayedLoop(); console.log('FINISH'); } myFunc();

Lo que sucede es;

  • Registros START
  • espera 1 segundo
  • Registra todos los item ${i} juntos (sin demora en el medio)
  • Inmediatamente registra FINISH

lo que quiero que pase es

  • Registros START
  • espera 1 segundo
  • Elemento de registros item 1
  • espera 1 segundo
  • Elemento de registros item 2
  • espera 1 segundo
  • Elemento de registros item 3
  • Inmediatamente registra FINISH

Ver JSFiddle para verlo en acción

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Puedes hacerlo así, usando un bucle for simple:

 const delayedLoop = async () => { const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); const myAsyncFunc = async (i) => { console.log(`item ${i}`); return true; }; const arr = ['one', 'two', 'three']; for(let i=0; i < arr.length; i++) { await myAsyncFunc(i); await delay(1000); } } const myFunc = async () => { console.log('START'); await delayedLoop(); console.log('FINISH'); } myFunc();

about 4 years ago · Santiago Gelvez 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