Durmiendo como Jedi: guía completa de sleep() en JavaScript 2025

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿por qué JavaScript no tiene un sleep() normal?

\n

¡Hola, colegas desarrolladores! Si alguna vez has migrado a JavaScript desde Python, PHP o Java, seguramente te has preguntado: «¿Y dónde está mi querido sleep(1) para que el programa duerma un segundo?». Y, tras buscar en la documentación, te has sorprendido al descubrir que no existe tal función en JS puro.

\n

Esto no es un error, sino una característica. JavaScript es un lenguaje monohilo que funciona en un bucle de eventos (Event Loop). Si simplemente bloqueáramos el hilo por un segundo, toda la interfaz se congelaría, los clics, las animaciones y las solicitudes dejarían de procesarse. Un sleep() bloqueante es un antipatrón para la web.

\n

Pero esto no significa que no podamos hacer una pausa. La pregunta «What is the JavaScript version of sleep()?» en Stack Overflow ha acumulado cientos de miles de visitas, y en 2025 tenemos todo un arsenal de soluciones, desde las simples hasta las más sofisticadas.

\n

En este artículo (especialmente para el portal educativo pythonlib.ru) analizaremos todas las formas legales de dormir JavaScript, sus ventajas y desventajas, y determinaremos las mejores prácticas para diferentes situaciones.

\n\n

La forma más correcta: async/await y promesas

\n

A partir de ES2017, JavaScript cuenta con asincronía potenciada: async/await. Si quieres hacer una pausa sin bloquear el hilo principal, necesitas una función que devuelva una Promise que se resuelva después del tiempo deseado.

\n

Aquí está, nuestro sleep() personalizado para 2025:

\n\n
// Función de retardo universal\nfunction sleep(ms) {\n    return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n// Uso\nasync function demo() {\n    console.log('Comenzamos...');\n    await sleep(2000); // Esperamos 2 segundos\n    console.log('¡Han pasado 2 segundos!');\n}\n\ndemo();\n
\n\n

Este es un sleep no bloqueante. Mientras se ejecuta await sleep(2000), el resto del código (manejadores de eventos, otras funciones asíncronas) sigue funcionando. El Event Loop no se duerme, simplemente pospone la ejecución de las siguientes líneas hasta que se resuelva la promesa.

\n\n

¿Por qué es la mejor práctica?

\n
    \n
  • No bloquea la UI — la interfaz sigue siendo receptiva.
  • \n
  • Sintaxis estándar — se lee como código síncrono normal.
  • \n
  • Adecuado para Node.js — el servidor no se cuelga.
  • \n
  • Soporte universal — navegadores modernos y Node.js 8+.
  • \n
\n\n

El clásico setTimeout()

\n

Antes de la era de async/await, usábamos setTimeout(). Sigue vivo y vigente, pero requiere callbacks, lo que genera el «infierno de las devoluciones de llamada».

\n\n
console.log('Inicio');\nsetTimeout(() => {\n    console.log('Han pasado 1.5 segundos');\n}, 1500);\nconsole.log('Fin (se ejecuta inmediatamente)');\n
\n\n

La salida en consola será: Inicio, luego Fin (instantáneo), y solo después Han pasado 1.5 segundos. Esto no es exactamente sleep() en el sentido clásico, pero para escenarios simples es ideal.

\n\n

¿Cuándo usar setTimeout?

\n
    \n
  • Cuando necesitas ejecutar una acción una sola vez después de un tiempo.
  • \n
  • En animaciones (por ejemplo, iniciar un efecto después de 300 ms).
  • \n
  • En scripts simples sin lógica compleja.
  • \n
\n\n

Sleep bloqueante (y por qué no debes hacerlo)

\n

Sí, técnicamente puedes congelar el hilo con un bucle vacío. Pero esto es mal puro.

\n\n
function blockSleep(milliseconds) {\n    const start = Date.now();\n    while (Date.now() - start < milliseconds) {\n        // Vacío — el procesador se calienta, la pestaña se congela\n    }\n}\n\nconsole.log('Inicio');\nblockSleep(3000);\nconsole.log('Han pasado 3 segundos (pero el navegador se colgó)');\n
\n\n

Este código hace exactamente lo que pides: detiene la ejecución

Blogs

Book Recommendations