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

466
Vistas
¿Cómo espero a que termine una promesa dentro de un bucle? (sin usar async-await)

El siguiente código espera solo la primera iteración del bucle for. Si uso async-await, funciona bien. Entonces, ¿dónde me estoy equivocando aquí?

 function wait(milliseconds) { return new Promise(resolve => setTimeout(resolve, milliseconds)) } function countDown(count) { for (let i = count; i > 0; i--) { wait(1000) .then(() => console.log(i)) .catch((error) => console.log(error)); } } countDown(5);
about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

Porque Promise ejecutará la instrucción "entonces" cuando haya realizado su tarea. Y si usa el ciclo así, la Promesa para i=4 se ejecutará inmediatamente después de ejecutar i=5. Esto hará que la salida solo espere por la primera.

La solución para esto es ejecutar la Promesa (i=4) después de la Promesa (i=5) usando la función recursiva.

 function wait(milliseconds) { return new Promise(resolve => setTimeout(resolve, milliseconds)) } function countDown(count) { if (count === 0) return; wait(1000) .then(() => { console.log(count) countDown(count - 1) }) .catch((error) => console.log(error)); } countDown(5);
about 4 years ago · Santiago Gelvez Denunciar

0

La ejecución no se detiene then llamas a una Promise como lo hace cuando usas await . En el primer bucle se crea una Promise cuyo método then se ejecutará en un segundo, pero la función continúa en bucle porque la ejecución no se ha detenido. Al final del ciclo, tiene cinco objetos Promise que se han creado consecutivamente sin pausas entre ellos, por lo que sus tiempos de espera de un segundo se ejecutan muy cerca uno del otro.

Aquí está el método de await con un comentario que indica dónde se detiene la ejecución.

 function wait(milliseconds) { return new Promise(resolve => setTimeout(resolve, milliseconds)); } async function countDown(count) { for (let i = count; i > 0; i--) { await wait(1000); // Execution stops here for one second before continuing console.log(i); } } countDown(5);

Aquí hay algo más cercano a la respuesta de Phúc Đỗ Vương con un comentario que indica dónde la ejecución no se detiene.

 function wait(milliseconds) { return new Promise(resolve => setTimeout(resolve, milliseconds)); } function countDown(count) { if (count === 0) { return; } wait(1000).then(() => { // This code, including the next call to countDown, will execute in one second console.log(count); countDown(count - 1); }); // The current call to countDown finishes before the next call begins } countDown(5);
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