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

193
Vistas
¿Cómo se puede ejecutar setTimeout en orden?

Tengo dos for loop , dentro de ellos tengo la función setTimeout como el siguiente código:

 for(let i=0;i<3;i++){ setTimeout(()=>{console.log(i)}, 1000) } for(let i=0;i<3;i++){ setTimeout(()=>{console.log(i)}, 1000) }

quiero que el segundo ciclo no se ejecute hasta después de que termine el primer ciclo,

 I want this result: 0 1 2 0 1 2 - and between 2 numbers wait 1 second.

¿como puedo hacer eso?

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Todavía no puedo comentar o haría preguntas aclaratorias, así que te daré lo que creo que estás pidiendo. Si desea un retraso de 1 segundo entre cada número que se registra en la consola, esto funcionará:

 const func = async () => { for (let i = 0; i < 3; i++) { await new Promise((resolve) => setTimeout(() => { console.log(i); resolve(); }, 1000) ); } for (let i = 0; i < 3; i++) { await new Promise((resolve) => setTimeout(() => { console.log(i); resolve(); }, 1000) ); } }; func();

Un resumen rápido de lo que está pasando aquí. Creé una función externa llamada func que hice asincrónica para poder usar la palabra clave await dentro de ella. Luego puse la llamada setTimeout dentro de una nueva instancia de Promise. La promesa combinada con la espera significa que javascript esencialmente se detendrá en esa línea hasta que se resuelvan las llamadas de Promesa. Una vez que se llama a resolve, esa instancia de Promise finaliza y la declaración de espera deja de "bloquear" javascript y la devolución de llamada continúa. TLDR:

  1. Para usar await, debe estar en una función asíncrona.
  2. Si se usa await delante de Promise, todo se detendrá hasta que se resuelva la promesa.
  3. Colocar la resolución de la promesa dentro de la devolución de llamada dada a setTimeout asegura que esperaremos hasta que finalice cada tiempo de espera ANTES de que comience el siguiente tiempo de espera.
about 4 years ago · Santiago Trujillo Denunciar

0

Creo que estás tratando de hacer una especie de contador

Prueba algo como esto:

 for(let i=1;i<=3;i++){ setTimeout(()=>{ console.log(i)}, i*1000 ) }

Déjame saber si esto resuelve tu problema

about 4 years ago · Santiago Trujillo Denunciar

0

esto funcionará

 nxt (0, 0);//seed the stack function nxt(num, itertn){ if(num == 3){//want till 2 if(itertn == 0){// first or 2nd iteration num =0; itertn++; }else{ return;//after 2nd stop } } console.log(num);//the work num++; setTimeout(nxt, 1000, num, itertn);//next after a second }

Pero hay otras formas de hacer esto.

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