APROPIAR LOS CONCEPTOS DE ASINCRONISMO
El asincronismo es básicamente una manera de aprovechar el tiempo y los recursos de nuestra aplicación, ejecutando tareas y procesos mientras otros son resueltos en background (como la llegada de la información de una API), para posteriormente continuar con las tareas que requerían esa información que no tenías de manera instantánea.
Un ejemplo fácil es comparando asincronismo vs sincronismo: en lenguajes síncronos al hacer un temporizador para ejecutar una función, todo el código se pausa hasta terminar el tiempo, mientras que en Javascript u otros lenguajes asíncronos, podemos estar aprovechando ese tiempo para ejecutar otros procesos hasta que ese tiempo finaliza.
El Event Loop hace que JavaScript parezca ser multihilo a pesar de que corre en un solo proceso.
Javascript se organiza usando las siguientes estructuras de datos:
El memory heap sirve para almacenar las asignaciones de variables y funciones y estas no se almacenan de manera ordenada y hay una interacción con el Callstack.
El callstack es la pila de tareas que ejecuta javascrip de manera síncrona, o sea, una por una y el navegador realiza la tarea y se la pasa al Callback Queue.
Y aquí el trabajo del Event Loop es de estar observando que la pila de tareas este vacía y que el Callback Queue tenga la tarea terminada para ser enviada a la lista de tareas (Callstack) para poder ser ejecutada.
En pocas palabras el Event Loop es un intermediario/observador entre la pila y cola para la distribución de tareas unidireccionales.
Los callbacks son el nombre de una convención para usar funciones que llaman a otras en JavaScript. No hay una palabra reservada llamada “callback” en el lenguaje JavaScript que haga que nuestro código sea diferente o especial, es más una convención. Tal es el caso que en lugar de llamar “callback” en el ejemplo de la clase, podemos llamarlo “suma” y funcionara igualmente.
La mayoría estamos acostumbrados a programar de manera síncrona, es decir, le indicamos al código que por ejemplo defina un Valor “X” y con otro valor “Y” y realizamos un calculo (Por ejemplo una multiplicación).
El problema radica en que por ejemplo si quisiéramos crear un programa que nos convierta nuestra moneda (pesos) a su equivalente en Bitcoin, podemos definir X (Valor de nuestro dinero) pero NO podemos definir de manera implícita “Y” (Precio del Bitcoin) por que es algo muy volátil. Entonces necesitamos obtener el precio del Bitcoin de un API, nuestro programa realiza una multiplicación de X * Y, sin embargo, no tenemos Y (precio del bitcoin) porque tenemos que esperar que el API nos conteste cual es este valor. Es ahí donde sirven los callback.
Existen dos métodos A y B.