¡Hola Platzinautas! 😄
Si tu cerebro también sangró un poco al tratar de entender el Asincronismo y la funcionalidad de los callbacks, este tutorial está hecho para ti !
Te prometo que después de esto entenderás por completo todos estos conceptos, y estarás más que listo para entender los reguests y las promesas, así que sin más previa vamos a ello!
functionhacerPrimeraCosa(){
var numero1 = 5console.log(numero1)
}
hacerUnaCosa()
Perfecto !, ahora entendamos que cuando se invoca una función, esta se agrega al (stack of frames) o (call stack) o Pila de Tareas
así que por el momento sólo hay una tarea / frame / call en pila / stack.
¿Saben qué? para no complicarnos con tanto nombre que son la misma cosa, entendamos
Pila de Tareas y Tareas
Ahora si Compliquemos esto !
haciendo que nuestra Función hacerPrimeraCosa ejecuté o llame a una segunda función, a la que llamaremos porsupuesto, hacerSegundaCosa
functionhacerSegundaCosa(){
var numero2 = 3*2return numero2
}
functionhacerPrimeraCosa(){
var numero1 = 5var numero2 = hacerSegundaCosa()
return numer1 + numero2
****
¿QUÉ HA pasado aquí ?
Pues que hacerPrimeraCosa ha invocado a HacerSegundaCosa, y al hacer esto hacerSegundaCosa se ha colocado por encima de HacerPrimeraCosa en la Pila de Tareas, esto con el fin de que el resultado de la multiplicación este listo para que se ejecute la suma final.
Cuando HacerSegundaCosa termina su ejecución, desaparece de la Pila de Tareas, dejando el camino libre a hacerPrimeraCosa
Cambios en la Pila de tareas…
2. LA COLA DE TAREAS (callback queue)
Lo primero que tenemos que entender sobre esto es que la Cola de tareas es algo completamente distinto a la Pila de la tareas.
La cola de tareas, cómo su nombre lo indica, organiza los llamados a funciones por el orden de llegada, NUNCA pondrá una función por encima de otra.
functionsaludarParte1 (){
console.log('Hola')
}
functionsaludarParte2 (){
console.log('Mundo !')
}
setTimeout( saludarParte2 , 2000 )
saludarParte1()
setTimeout() : es un método del navegador que nos permite enviar una función a la Cola de Tareas, acepta dos parametros.
el primero: es la función que enviaremos a la cola
el segundo: es el tiempo en milisegundos que tiene que esperar esa función para ser agregada a la cola
PERO PERO PERO !…si JavaScript es un lenguaje single threaded
¿Cómo puede existir una cuenta atrás de 2 segundos que se este ejecutando al mismo tiempo que se imprime nuestro hola ?
Pues resulta que esto es posible gracias a las WEB APIs que proveen al runtime de JavaScipt de hilos adicionales de ejecución. Por eso dije que setTimeout() es un metodo del navegador. algo aparte de Javascript, una ayudita.
Event Loop
por fin estamos listos para entender el funcionamiento del Event Loop. Entendamolo como un Agente de transito el cual regula que funciones son ejecutadas y cuando.
El Event Loop tiene la capacidad de saber cuando nuestra Pila de tareas se encuentra vacía, en ese momento y SÓLO en ese momento, comenzará a ejecutar las funciones que estén en la Cola de tareas.
Para ejemplificar esto digamos que dentro de nuestro “Hola mundo” habrá una función intrusa que será agregada a la Pila de tareas con una invocación de la misma en la primera parte de nuestro saludo.
Más código y menos habladuría!
functionintrusa(){
console.log('PATATA !!!')
}
functionsaludarParte1(){
intrusa()
console.log('Hola')
}
functionsaludarParte2(){
console.log('Mundo !')
}
setTimeout(saludarParte2, 0)
saludarParte1()
¿QUÉ HA pasado aquí ?
SaludarParte2() se agrega a la Cola de tareas y aunque tenga un delay de 0, el Event Loop no la ejecutará hasta que la Pila de la tareas este vacía.
Luego SaludarParte1() se agrega a la Pila de Tareas, pero antes de que pueda hacer algo agrega la función intrusa() hasta arriba en la pila.
Intrusa() se ejecuta y desaparece de la Pila, dejando a SaludarParte1 con el camino libre.
SaludarParte1() se ejecuta, dejando la Pila de tareas vacía, para por fin permitir la ejecución de la Cola de tareas, o sea … SaludarParte2()
SaludarParte2() pasa a la Pila de tareas, ejecutandoce y terminando el hilo logico de nuestro script.
Explicación gráfica
Si llegaste hasta aquí y lo entendiste todo, me sentiré más que contento de haberte ayudado 😄
Que gran gran explicación Andre 😄
Wow , muchas gracias tu tutorial es super claro, entendi el concepto.
¡Hola Cinthya!
Me alegro mucho de saber que entendiste estos conceptos, te mantendré informada cuando suba el de Reguests y Promesas 😄
Good
Wow !!! Que buena explicación. Sos grande, Andre!!. Muchas muchas gracias. 😃
Nada mejor que abundar en un tema. Mucha gracias.
Excelente explicacion!! Muchas Gracias!
Gracias, me ayudo a tener un panorama mas claro, aunque creo que aun no termino de interiorizar este tema, con practica seguro entenderé mas
Me agrado tu explicación y me ayudo. Gracias.
Gracias, genial explicación, - leyendo con la voz de Richard Kaufman -.
Genial tu explicación bro, me has hecho mas fácil este día.
Buena explicación, entonces en la pila de tareas solo puede haber una función a la vez? Y la cola de tareas son las funciones que faltan por ejecutar y digamos que se ejecutan en orden de como las llamamos?
En la última parte me estaba perdiendo, hasta hice un documento en medio de mis archivos para entenderle JAJAJA Pero ya. Lo explicaste excelente bro! 😉
#Excelente
Gracias por compartir tu conocimiento, entendí un poco mas.
Buenísimo!
Excelente explicación! me ha quedado muy claro
Súper buena tu explicación, sin embargo aún no me queda claro cómo JS sabe qué funciones agregar a la cola de tareas y cuáles no. Entiendo que setTimeout es una de esas funciones, pero ¿existen más?
Un verdadero lifehack este articulo! Literalmente explicado con peras y manzanas.
Hola Pepe! MUCHISIMAS GRACIAS por la explicación! Me fue de gran ayuda!!!
Grande!
El último ejemplo estuvo perfecto para entenderlo todo. Gracias!!!