¿Por qué al colocar la función setTimeOut no se suma el tiempo en cada iteración del ciclo For? Me explico: yo probé cambiando el tiempo ...

Pregunta de la clase:
Scope
Diego Martínez

Diego Martínez

Pregunta
studenthace 5 años

¿Por qué al colocar la función setTimeOut no se suma el tiempo en cada iteración del ciclo For? Me explico: yo probé cambiando el tiempo por 1000 milisegundos y el tiempo que tardó en imprimir los número fue de 1 segundo y yo pensaba que tardaría 10 segundos.

5 respuestas
para escribir tu comentario
    Ramdhei López Arcila

    Ramdhei López Arcila

    studenthace 5 años

    El tiempo no aumenta cada que itera el ciclo, es un valor estático.

    Fernando Alejandro Yerena Ramos

    Fernando Alejandro Yerena Ramos

    studenthace 5 años

    Hay formas de conseguir el resultado que esperas. Una de ellas es multiplicar el tiempo por "i". De esa forma el tiempo de espera cambia en cada iteración del

    for
    ; en la primera 1s, en la segunda 2s, etc.

    function printNumbers(params) { for (var i = 0; i < 10; i++) { function eventuallyPrintNumbers(n) { setTimeout(() => { console.log(n) }, 1000 * i); } eventuallyPrintNumbers(i) } } printNumbers()

    Tambien se pueden encadenar promesas con el método .then, o usar funciones asíncronas con async/await. Al final, en todos los casos debemos indicarle a JS como queremos que se comporte al trabajar con asincronía, pero todo lo que mencioné se ve en clases mas adelante.

    Espero haberme explicado de forma clara y te haya sido de ayuda. Cualquier cosa aquí andamos. 🍍🍍🍍

    Fernando Alejandro Yerena Ramos

    Fernando Alejandro Yerena Ramos

    studenthace 5 años

    Hola, @ludmartinez. Una disculpa, no había comprendido la pregunta.

    Lo que sucede se debe a la forma en que JavaScript trabaja la asincronía. Cuando JS entra al

    for
    lo que hace es enviar, en cada repetición; la ejecución de setTimeout() a una cola llamada Schedule Task (Tareas programadas).

    En la schedule task el setTimeout() esperará el tiempo que le indicamos para ejecutar el callback que pasamos de parametro. Como a todos los setTimeout() le indicaste que tardarán un segundo, todos se mostrarán una vez pase ese segundo.

    Diego Martínez

    Diego Martínez

    studenthace 5 años

    Creo que no me dí a entender: En cada iteración del ciclo For se ejecuta la función SetTimeOut con un tiempo de 1000 ms (Por ejemplo). Lo que yo creí es que en cada iteración iba a esperar 1 segundo para imprimir cada valor, pero no sucede eso, sino que luego de 1 segundo imprime todos los valores. El resultado que yo esperaba es que para que imprimiera todos los valores iba a tardar 10 segundos por cada segundo de iteración. Pero el resultado obtenido fue que se imprimen todos los valores luego de 1 segundo

    Fernando Alejandro Yerena Ramos

    Fernando Alejandro Yerena Ramos

    studenthace 5 años

    Hola @ludmartinez, un 1 segundo = 1000 milisegundos. Para que se ejecute después de 10 segundos tendrías que poner 10000. 😊

Curso Profesional de JavaScript

Curso Profesional de JavaScript

Mejora tus habilidades en Javascript. Conoce Typescript y cómo puedes ocuparlo para mejorar el control de tus variables. Comprende conceptos avanzados que te permitan plantear mejores soluciones en tu código. Conoce las APIs del DOM y descubre cómo puedes organizar mejor tu código utilizando patrones de diseño.

Curso Profesional de JavaScript

Curso Profesional de JavaScript

Mejora tus habilidades en Javascript. Conoce Typescript y cómo puedes ocuparlo para mejorar el control de tus variables. Comprende conceptos avanzados que te permitan plantear mejores soluciones en tu código. Conoce las APIs del DOM y descubre cómo puedes organizar mejor tu código utilizando patrones de diseño.