> Faqs > ¿Qué significa que Javascript es asíncrono?

¿Qué significa que Javascript es asíncrono?

He leído en varias ocasiones que Javascript es un lenguaje asíncrono. Realmente no sabría decir qué significa esa asíncronía del lenguaje.

¿Alguien me podría explicar en palabras sencillas qué significa que Javascript sea asíncrono?

Respuestas

Asíncrono quere decir fuera del tiempo. En el caso de Javascript indica que hay ciertas cosas que las hace fuera del hilo de ejecución del código.

Los lenguajes síncronos ejecutan una línea después de otra. Es lo que nosotros naturalemte suponemos al leer un código.

sentencia1
sentencia2
sentencia3

La sentencia 3 no se ejecutará hasta que acabe la sentencia2 y la sentencia2 no se ejecutará hasta que acabe la sentencia1. Ese es el comportamiento síncrono, que como digo es el típico de la mayoría de los lenguajes más utilizados.

Sin embargo, en Javascript las cosas no siempre son así.

setTimeout(() => console.log('uno'));
console.log('dos');

¿Qué mensaje crees que se mostrará antes en la consola? 'uno' o 'dos'?

Si el lenguaje fuera síncrono, se ejecutaría primero la línea 1 y luego la línea 2, pero en este caso es al revés, porque setTimeout() es un método asíncrono.

Los métodos asíncronos tienen la característica de liberar el flujo de ejecución de Javascript, permitiédo al hilo de ejecución del lenguaje hacer otras tareas mientras éstos se ejecutan. Esto produce que en ocasiones el lenguaje cambie el orden en el que se ejecuta el código, con respecta cómo el código está escrito.

Teniendo en cuenta que Javascript es un lenguaje mono-hilo (solamente tiene un proceso ejecutando el código), la asincronía es esencial para que las cosas funcionen y el rendimiento del lenguaje sea el deseado.

Por ejemplo, pensemos en una consulta Ajax, que va a tardar un poco en recibirse su respuesta. La asincronía del lenguaje permite que, a pesar que la ejecución de la consulta mediante Javascript se vaya a tomar un tiempo y a persar que Javascript disponga de un único hilo, durante el tiempo en que las tareas asíncronas están en proceso, como esa supuesta solicitud Ajax, Javascript podrá dedicarse a hacer otras cosas.

Este comportamiento es básico para que el navegador no se bloquee. Piensa por ejemplo cuando te metes en un bucle infinito con un bucle for en el que te has confundido escribiendo la condición de parada.... cuando nos metemos en un bucle infinito en muchas ocasiones se bloquea el navegador, o al menos la pestaña del navegador con la que estamos trabajando y toca cerrarla para volver a poder hacer cosas con la página. Esto ocurre porque ese bucle es síncrono... él cuenta y cuenta y cuenta, bloqueando el único hilo de ejecución del lenguaje, lo que hace que el navegador, o al menos esa pestaña, se quede inoperativa y no te responda a nuevas acciones. Si las llamadas Ajax fuesen síncronas (o un setTimeout) durante el tiempo que están parados esperando no podría Javascript atender a otras cosas, como mostrar feedback al usuario, responder a su interacción con otros elementos de la página, etc.

Espero que todo esto te haya ayudado a enteder qué significa que Javascript sea asíncrono.

Camila
452 18 28 5
Gracias! me lo has aclarado bastante!