La asincronía de JavaScript consiste en delegar algunas tareas para que las ejecute el navegador, una vez esas tareas están terminadas entran en otra estructura llamada Callback queue. En el Callback queue la primera tarea que entra, es la primera en salir. ¿Cómo salen? Mediante el Event Loop.
El Event loop es el encargado de preguntar al Call Stack si ya ha terminado todas sus tareas. Entonces, si y solo si el Call Stack está vacío, el Event loop moverá las funciones que están en el Callback queue para que se ejecuten.
Para entender mejor este término, eetomemos el ejemplo de los tacos, pero ahora tienes un compañero. Entonces tú delegas la tarea de preparar la torta a otra persona, mientras realizas los tacos.
Luego de 5 minutos por cada tarea, entregas las tortas a los clientes correspondientes. Después de 10 minutos necesitas la torta, entonces preguntas ¿ya está lista la torta? Tu ayudante te entrega la torta y se lo entregas. En total fueron 20 minutos y todos los clientes recibieron su pedido. Así funciona la asincronía en JavaScript.
Asincronía en JavaScript
El proceso completo que sigue JavaScript se muestra en la siguiente imagen:
Las Web APIs son herramientas adicionales que te ofrece el navegador para realizar peticiones, modificar el DOM, entre otras. Estas herramientas las puedes observar en el objeto global window.
Ejemplo de asincronía
Rápidamente, la función asíncrona setTimeout consiste en ejecutar otra función en cierto tiempo. Recibe dos valores, la función a establecer un retraso y el tiempo en milisegundos.
Observa el siguiente código y piensa cuál será el resultado:
Esto es porque la función bar salió del Call Stack para esperar asíncronamente un tiempo definido (0 segundos en este caso). Después tendrá que esperar (sin importar el tiempo establecido en setTimeout) hasta que se vacíe el Call Stack para que el Event loop le permita entrar nuevamente al Call Stack para ejecutarse.
El tema de asincronía en JavaScript es muy amplio, aún falta conocer los temas de callbacks, promesas y ""async / await"" (una estructura de las nuevas versiones de ECMAScript). Por lo que te recomiendo el Curso de Asincronismo con JavaScript.
Taquería DeGranda presenta a:
.
🌮 - call stack : el taquero (órdenes rápidas)
👨🍳 - web APIs : la cocina
🌯 - callback queue : las órdenes preparadas
💁♂️ - event loop : el mesero
.
a que quedó súper claro el JS Runtime y cómo funciona el asincronismo!? 🤪
Te pasaste con esa explicación!
Buena explicación
Te esperare en el callback queue, paciente, hasta que el call stack de tu corazón se sienta listo para recibirme
Lindo poema 😢
Me dejastes colgado con el even loop para siemrpe. !
Cursos que te vuelan la cabeza.
Me gustan estos cursos más cortos y muy completos.
Tienes razon son los mejores.
tengo la misma opinion
La mejor explicación de asincronismo que he escuchado. 👌🏼
Concuerdo con usted estimado :)
X2
Jajaja el meme indicado 😆
el mejor event loop de la historia
Si se quedaron con duda, aquí un ejemplo gráfico para entender mejor:
Muy bueno!
Excelente apoyo visual, gracias
ENTENDÍ TODO, BUEN SERVICIO! 5 ESTRELLAS!
5 ESTRELLAS
Asincronía
Por default corre una tarea a la vez – Sincronismo
Ahora veremos que es el asincronismo
Memory Heap: Espacio donde se guardan funciones y variables
Call Stack: Donde se apilan todas las tareas que tenemos que hacer con Javascript
Web API´s (Ofrecidas por el navegador para manipular lo siguiente)
Dom(document)
AJAX(XMLHttpRequest)
Timeout(setTimeout)
Call Back Queue: El orden en que se van a ejecutar a funciones
Al momento de usar asincronismo sacamos funciones del Call Back Queue que no serán ejecutadas por javascript y serán ejecutadas por el navegador despues
Ejemplo
Definitivamente cuando lo explican con comida es mas fácil de entender :)
Muy buena explicación!!!
Me encanta como el profe De Granda explica temas tan técnicos de una manera tan simple para que todos tengan claro cómo funciona.
Encantado con éste curso! :D
Esta clase me encantó porque, logró explicarlo en una manera muy "coloquial".
Antes que copien y peguen el siguiente script reflexionen sobre su output:
06:03: cocina, tacos, torta... aquí es cuando vas al refrigerador
**Asincronismo: **
Cuando hablamos del asincronismo hablamos del siguiente proceso →
En el JS runtime enviroment se comienza a ejecutar nuestro codigo haciendo uso del Memory Heap y el Call Stack.
Pero haciendo uso del Timer una de nuastras Web API's (API's del V8 de chrome). Podemos "delegar" codigo que el browser va a ir preparando simultaneamente pero sin ejecutarse todavia. Los resultados de este codigo solo entraran en escena cuando sea autorizado por el Event Loop.
El codigo delegado debe ser guardado bajo el method setTimeout(), este lo pasara por la API Timer. Que organizara el codigo en un Callback Queue
El orden en que se van a ejecutar estas acciones se ubica en el Callback Queue.
Este codigo "delegado", listo para ejectutarse segun el Callback Queue solo se ejecutara cuando las tareas en el Call Stack esten hechas.
El event loop se encarga de verificar iterativamente si el Call Stack esta vacio, para luego permitir la ejecucion de las acciones en el Callback Queue
pd: No me quedo muy claro si el Timer es una API o no, asi que si tengo mal esa parte sientase libre de corregirme.
El event loop es una de las cosas mejores pensadas
El memory heap vive en la ram?
Si ocupa la memoria ram
Hasta que usaron tacos como ejemplo entendí el asincronismo. xD
A que se refiere con navegador per se?
Hola,
Según la RAE es: Por sí o por sí mismo. Se usa muchas veces para hablar de hechos que se "dan por sentado" o en el caso de la tecnología por "predeterminado"
Saludos
Que se ejecuta en si mismo.
Hola amigos, encontré un video en donde explica de manera visual mediante la herramienta loupe como se comportan los procesos explicados en este video (Call Stack, Web Apis, Callback Queue, Event Loop), se los recomiendo, lo único que necesitan hacer es introducir código (pueden usar el que el profesor usa) y la herramienta les mostrará de manera dinámica y paso a paso cómo ocurre la "magia". :)
Creo que aquí faltó hablar sobre las promesas y las "microtasks queues", recomiendo esta clase del curso profesional de JS para que vean ese punto.
https://platzi.com/clases/1642-javascript-profesional/22169-event-loop/
Cabe resaltar que las "Microtasks queues" tienen preferencia ante la "Callback queue"