Como no pude comentar, me veo obligado a escribir esta publicación. Obtuve el siguiente código que retrasa / espera exactamente 1 segundo o 1000 milisegundos:
let n = 5;
for (let i=1; i<n; i++)
{
setTimeout( function timer()
{
console.log("hello world");
}, i*1000 );
}
Pero, ¿cómo puedo retrasarlo i * 1000 segundos en lugar de 1000 milisegundos fijos para que la espera dependa del número de iteración?
Por ejemplo, si n = 5, entonces quiero que el bucle demore 1 segundo en la primera iteración. 2 segundos en la segunda iteración, y así sucesivamente ... el retraso final será de 5 segundos.
javascript
wait
Miguel
fuente
fuente
i
: si no lo hizo, entonces recibirá todas esas alertas al mismo tiempo.Respuestas:
Aquí hay una función que se mostrará de inmediato, luego 1 segundo más tarde, 2 segundos después, 3 segundos después de eso, etc. No se necesitan cálculos especiales, no se necesitan promesas.
fuente
Si bien esta tarea podría resolverse con promesas, flujos reactivos y otras herramientas geniales (¡hey, nadie ha sugerido usar trabajadores todavía!), También puede resolverse con un poco de aritmética.
Entonces desea tiempos de espera en una secuencia: 1s, el anterior + 2s, el anterior + 3s, y así sucesivamente. Esta secuencia es: 1, 3, 6, 10, 15 ... y su fórmula es
a[n] = n * (n + 1) / 2
. Sabiendo que...fuente
Puede intentar usar async / await (Promesas) para serializar su código:
fuente
Me tomó un tiempo descifrar tu pregunta xD, pero ¿es esto lo que quieres?
Esto seguirá disparando console.log con i * 1000 de retraso cada vez. así que la primera vez durará 1 segundo (1 * 1000), luego será de 2 segundos y así sucesivamente.
fuente
El bucle no espera a que se complete la función de tiempo de espera. Entonces, cuando el ciclo se ejecuta, programa su alerta para cada índice.
Puede usar una función que se ejecutará de acuerdo con su índice pero programada al mismo tiempo. Puedes sentir la diferencia de 3 segundos.
fuente
Use llamadas recursivas en lugar de for loop
fuente