Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

202
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!