javascript

setTimeout y setInterval en JavaScript, un acercamiento a los hilos

En este post voy a explicar dos funciones muy importantes que existen en JavaScript, me refiero a setTimeout y setInterval.

Ambas funciones nos permiten tener algo parecido a los hilos o threads en JavaScript, pero de una manera muy simple. Y por simple no quiero decir que le falten características, sino que es muy fácil de usar.

Por cierto, setTimeout y setInterval funcionan tanto en los navegadores web como en Node JS.

JavaScript y los hilos

JavaScript es por naturaleza asíncrono. Tiene callbacks, promesas o await. Las peticiones de AJAX las hace de manera asíncrona y también el funcionamiento con WebWorkers.

Todo esto hace que pensemos de manera asíncrona, con código no bloqueante como en otros lenguajes de programación.

Gracias a esto, setTimeout y setInterval nos permiten abstraer los hilos de manera sencilla.

setTimeout en JavaScript: o cómo agendar la ejecución de una función

setTimeout funciona para ejecutar determinada función tiempo después. La sintaxis es:

setTimeout(función, tiempoEnMilisegundosDeRetraso, argumentosQueSePasanALaFunción...)

Normalmente lo vas a ver con una función anónima así:

setTimeout(function() {
 console.log("Yo me imprimo un segundo después, es decir, mil milisegundos después :)");
}, 1000);

Ejemplos de setTimeout en JavaScript

En ese caso la función se va a ejecutar mil milisegundos después. Otra forma es usando funciones flecha:

setTimeout(() => {
 console.log("Función flecha. Me ejecuto un segundo después :)");
}, 1000);

Como el primer argumento es una función, igualmente podríamos pasarle el nombre de una función que ya exista. Así:

// Definir una función llamada imprimir
const imprimir = () => {
 console.log("Soy una función que imprime un mensaje a la consola");
};
// E indicar que se llame a imprimir en 1000 milisegundos
setTimeout(imprimir, 1000);

Para terminar la explicación, si la función que le pasas recibe argumentos, puedes pasar esos argumentos a setTimeout. Veamos un ejemplo:

// Definir una función llamada saludar que recibe el nombre y la edad
const saludar = (nombre, edad) => {
 console.log(`Hola ${nombre} tu edad es de ${edad}`);
};
// Llamar a saludar y pasarle argumentos
setTimeout(saludar, 1000, "Luis", 20);

Se podría decir que a la función que se llama se le pasan los argumentos desde el tercer lugar.

Para concluir analicemos la anatomía de setTimeout en JavaScript:

Anatomía de setTimeout en JavaScript

Cabe mencionar que igualmente se puede definir una función anómina dentro de setTimeout, y dentro de esa función llamar a otra con argumentos como en el siguiente código de ejemplo:

// Definir una función llamada saludar que recibe el nombre y la edad
const saludar = (nombre, edad) => {
 console.log(`Hola ${nombre} tu edad es de ${edad}`);
};
// Llamar a saludar y pasarle argumentos
setTimeout(function() {
 saludar("Luis", 21);
}, 1000);

Lo que devuelve setTimeout, y clearTimeout

Al llamar a setTimeout se devuelve un identificador. Más tarde, gracias a ese identificador, podemos cancelar el temporizador.

La sintaxis es:

let id = setTimeout(función, tiempoDeRetraso, argumentosQueSePasan);

Pero lo importante aquí es que gracias a ese id devuelto, podemos cancelar el temporizador (eso sí, debe ser antes de que ocurra) con clearTimeout así:

clearTimeout(id);

Usos de setTimeout

Personalmente lo he usado para indicarle al usuario que la operación fue exitosa y después redireccionarlo a otra página. Por ejemplo, que inserte un nuevo producto y lo redireccione a la página de productos.

Otros usos incluyen muchas cosas que dependen de la aplicación pero en resumen setTimeout funciona para poner un temporizador y ejecutar código cuando se termine el tiempo; con la opción de cancelarlo con clearTimeout.

setInterval: ejecutar código cada determinado tiempo, de manera repetitiva

Sintaxis es como el primo de setTimeout; ya que setInterval hace que determinada función se ejecute cada cierto tiempo.

En cambio, setTimeout ejecuta una función con retraso y ya, pero setInterval es repetitivo.

La sintaxis de uso es:

let idIntervalo = setInterval(función, cadaCuantosMilisegundosSeRepite, argumentos);

Para las funciones aplica lo mismo. Podemos definir una función anónima, función flecha o el nombre de una función. Y pasarle argumentos como se hizo con setTimeout. Veamos un ejemplo:

const imprimir = () => {
 console.log(`Soy llamada cada medio segundo`);
};
setInterval(imprimir, 500);

En ese caso se va a imprimir un mensaje cada medio segundo, de manera infinita. Lo repito: podemos pasar el nombre de la función, definir una anónima y pasar argumentos.

clearInterval y el id de setInterval

Justo como pasa con setTimeout, setInterval devuelve un id. Gracias a ese id podemos cancelar el intervalo llamando a clearInterval así:

clearInterval(idQueDevolvióSetInterval);

Y eso que se ejecute la función cada cierto tiempo.

Usos de setInterval en JavaScript

Son bastantes, pero uno de ellos podría ser refrescar un reloj con la hora actual. También podría mostrarse un contador y muchas cosas más.

Conclusión

Hemos aprendido a usar setTimeout y setInterval: una forma fácil de trabajar con hilos en JavaScript.

Cabe mencionar que puedes llamar a setTimeout y setInterval infinitas veces; es decir, tener muchos procesos ejecutándose al mismo tiempo.

Eso sí, ten cuidado con las variables y las condiciones de carrera.

Te invito a leer más sobre JavaScript y sobre Node.js.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Imprimir ñ en impresora térmica

En este post te enseñaré a imprimir la letra ñ en una impresora térmica. Voy…

2 días hace

Tramitar acta de nacimiento en línea de manera instantánea

En este post te quiero compartir mi experiencia tramitando un acta de nacimiento de México…

3 días hace

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 semanas hace

Esta web usa cookies.