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

190
Vistas
¿Cómo esperar a que se complete un bucle con promesas para ejecutar un método?

Quiero ejecutar un ciclo con promesas, pero quiero ejecutar un método solo después de que se complete el ciclo.

Este es un ejemplo similar de lo que quiero hacer.

 const array = ['a', 'b', 'c']; console.log('start'); array.forEach((i) => { setTimeout(()=> console.log(i), 3000); }); console.log('end');

este es el resultado que obtuve.

 start end a b c
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Es fácilmente factible con algo como Promise.all una vez que sepa cómo hacerlo.

La clave es crear una matriz de Promises y luego llamar a Promise.all en él.

Pero antes de que pueda mostrar, necesitamos hacer algunos ajustes:

Primero ajustemos setTimeout para devolver una promesa:

 function delay(amount) { return new Promise((resolve) => { setTimeout(resolve, amount); }); }

Luego cambie el código para enviar todas las promesas creadas a una matriz:

 const array = ['a', 'b', 'c']; let promises = []; async function doSomething(i) { console.log(i); await delay(3000); } console.log('start'); array.forEach((i) => { const promise = doSomething(i); promises.push(promise); });

Aquí doSomething está haciendo el trabajo asíncrono.

Por último, esperamos que todas las Promesas se resuelvan con Promise.all :

 await Promise.all(promises); console.log('end');

Da:

 start a b c end 

 function delay(amount) { return new Promise((resolve) => { setTimeout(resolve, amount); }); } const array = ['a', 'b', 'c']; let promises = []; async function doSomething(i) { console.log(i); await delay(3000); } console.log('start'); array.forEach((i) => { const promise = doSomething(i); promises.push(promise); }); Promise.all(promises).then(() => { console.log('end'); });

about 4 years ago · Juan Pablo Isaza Denunciar

0

Una opción es hacer lo siguiente:

 const array = ['a', 'b', 'c']; console.log('start'); const promises = []; array.forEach((i) => { promises.push(new Promise(resolve => setTimeout(() => { console.log(i) resolve() }, 3000))) }) Promise.all(promises).then(() => { console.log('end'); })
about 4 years ago · Juan Pablo Isaza Denunciar

0

setTimeout es asíncrono, pero no se puede ejecutar como una promesa. Si su pregunta directa es ejecutar su código cuando finalicen todos los tiempos de espera, debe hacerlo de la siguiente manera:

 const array = ['a', 'b', 'c']; let numberOfTimeoutsToBeExecuted = array.length; // keep track of the number of timeouts that have finished execution let numberOfTimeoutsExecuted = 0; console.log('start'); array.forEach((i) => { setTimeout(() => { console.log(i), numberOfTimeoutsExecuted += 1; // execute your code when the last timeout has finished execution if (numberOfTimeoutsToBeExecuted === numberOfTimeoutsExecuted) { console.log('end'); } }, 3000); });

Sin embargo, si desea esperar a que varias promesas terminen de ejecutarse, la siguiente es la mejor manera de hacerlo:

 const array = ['a', 'b', 'c']; const promises = []; console.log('start'); array.forEach((i) => { // add all promises that will be executed into array promises.push(new Promise((resolve, reject) => { setTimeout(()=> { console.log(i); resolve(); }, 3000); })); }); // execute all promises here Promise.all(promises).then(() => console.log('end'));
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