Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

207
Visualizações
Retrasar correctamente setTimeout

En la siguiente función

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

Después de 1 segundo, inmediatamente console.log 1, 2 y 3 simultáneamente.

Si multiplico el delay por i ,

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

Yo console.log cada i en mi bucle después de 1 segundo. ¿Por qué funciona esto?

Además, ¿por qué el siguiente código

 function test2(n, delay) { let promise = new Promise(resolve => setTimeout(() => { resolve() }, delay)) for (let i = 0; i < n; i++) { promise.then(console.log(i)) } } test2(3, 1000)

inmediatamente console.log 1, 2 y 3 simultáneamente en lugar de esperar cada segundo para console.log el siguiente valor i ? ¿Hay alguna manera de console.log el siguiente valor i usando el encadenamiento de promesas después de esperar cada segundo sin usar async y await ?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

La razón por la que necesitamos multiplicar i con delay es al establecer un tiempo de timeout con un tiempo de espera de 1 s/2 s/3 s. En el ejemplo, haces que console.log() lo ejecute después de 1 segundo, 2 segundos y 3 segundos...

Si no multiplica la i con retraso, entonces todo el tiempo de espera que asigne usando for loop se ejecutará después de 1 ( delay ) segundo al mismo tiempo (casi podría ignorar el tiempo de ejecución de for loop.

Otra solución para repetir cada segundo es usar setInterval :

 let i = 0; let interval; function test2(n,delay){ //Change millisecond to second delay*=1000 interval = setInterval(function(){ console.log(i); i++; if(i>n) window.clearInterval(interval) },delay) } test2(10,1)

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda