<aside> 🛵 JavaScript sólo puede hacer una cosa a la vez, sin embargo; es capaz de delegar la ejecución de ciertas funciones a otros procesos. Este modelo de concurrencia se llama EventLoop.

JavaScript delega en el navegador ciertas tareas y les asocia funciones que deberán ser ejecutadas al ser completadas. Estas funciones se llaman callbacks, y una vez que el navegador ha regresado con la respuesta, el callback asociado pasa a la cola de tareas para ser ejecutado una vez que JavaScript haya terminado todas las instrucciones que están en la pila de ejecución.

Si se acumulan funciones en la cola de tareas y JavaScript se encuentra ejecutando procesos muy pesados, el EventLoop quedará bloqueado y esas funciones pudieran tardar demasiado en ejecutarse.

</aside>

<aside> 🛵 * Callbacks Ventajas:

</aside>

//todo en la misma
//lista de To-Do
console.log('a')
console.log('b')
console.log('c')
//todo en la misma
//lista de To-Do PD: no funciona
console.log('a')
setTimeout(console.log('b'),2000)
console.log('c')
//setTimeout necesita una referencia, por eso es que necesita una funcion
//... para que se posicione en la lista de espera y apartir de eso contar
console.log('a')
//setTimeOut(function() => { contenidoDeFuncion, tiempoEnMilisegundos} )
setTimeout(() => console.log('b'),2000)
//esta sentencia también entro en la lista de tareas
setTimeout(() => console.log('b otra vez'),0)
console.log('c')

/*
Obtenemos los datos
//a
//c
//b otra vez
//b

porque a se ejecuta al instante
b se manda a la lista de tareas
b otra vez se manda a la lista de tareas
c se ejecuta al instante

el la lista de tareas ya tenemos los callbacks pero b nos pide esperar 2 segundos
mientras que b otra vez se manda en cuanto esta listo el callback
*/
Datos recividos por una promesa: resolve y reject

Método recomendando por la comunidad para manejar asincronismo en JavaScript: async await

El estado 4 de xhttp.readyState hace referencia: completed

- El método then() retorna: json: promesa
- Para qué utilizamos JSON.parse(xhttp.responseText): xml to objeto inmutable : text to objeto iterable

La recomendación de la comunidad para anidar callbacks es: maximo 3 callbacks

Expresión la cual pausa la ejecución de la función así­ncrona y espera la resolución 
de la Promise: then

Nos permite definir una función así­ncrona: async

Nos permite ejecutar una serie de promesas secuencialmente : promise.all()

Las promesas resuelven un principal problema de las callbacks: callback hell

Cómo aseguramos manejar los errores asincrónicos correctamente: try{} catch (err) {}

Cuál es la forma correcta de retornar un Error en reject: reject(new Error('Error'))

Para qué nos sirve el método "catch()" : Registrar la razon del rechazo 

Para qué nos sirve el método XMLHttpRequest: hacer solicitudes http facilmente
API
Interfaz de programación de aplicaciones (Application Programming Interface). Es un conjunto de
rutinas que provee acceso a funciones de un determinado software.

Concurrencia
Cuando dos o más tareas progresan simultáneamente.

Paralelismo
Cuando dos o más tareas se ejecutan, literalmente, a la vez, en el mismo instante de tiempo.

Bloqueante
Una llamada u operación bloqueante no devuelve el control a nuestra aplicación hasta 
que se ha completado. Por tanto el thread queda bloqueado en estado de espera.

Síncrono
Es frecuente emplear ‘bloqueante’ y ‘síncrono’ como sinónimos, dando a entender que toda la
operación de entrada/salida se ejecuta de forma secuencial y, por tanto, debemos esperar a que
se complete para procesar el resultado.

Asíncrono
La finalización de la operación I/O se señaliza más tarde, mediante un mecanismo específico
como por ejemplo un callback, una promesa o un evento, lo que hace posible que la respuesta
sea procesada en diferido.

Call Stack
La pila de llamadas, se encarga de albergar las instrucciones que deben ejecutarse. Nos indica en
que punto del programa estamos, por donde vamos.

Heap
Región de memoria libre, normalmente de gran tamaño, dedicada al alojamiento dinámico de
objetos. Es compartida por todo el programa y controlada por un recolector de basura que se
encarga de liberar aquello que no se necesita.

Cola o Queue
Cada vez que nuestro programa recibe una notificación del exterior o de otro contexto distinto al
de la aplicación, el mensaje se inserta en una cola de mensajes pendientes y se registra su
callback correspondiente.

Eventloop o Loop de eventos
Cuando la pila de llamadas (call stack) se vacía, es decir, no hay nada más que ejecutar, se
procesan los mensajes de la cola. Con cada ‘tick’ del bucle de eventos, se procesa un nuevo
mensaje.

Hoisting
Sugiere que las declaraciones de variables y funciones son físicamente movidas al comienzo del
código en tiempo de compilación.

DOM
DOM permite acceder y manipular las páginas XHTML como si fueran documentos XML. De
hecho, DOM se diseñó originalmente para manipular de forma sencilla los documentos XML.

XML
Lenguaje de marcado creado para la transferencia de información, legible tanto para seres
humanos como para aplicaciones informáticas, y basado en una sencillez extrema y una rígida
sintaxis. Así como el HTML estaba basado y era un subconjunto de SGML, la reformulación del
primero bajo la sintaxis de XML dio lugar al XHTML; XHTML es, por tanto, un subconjunto de
XML.

Events
Comportamientos del usuario que interactúa con una página que pueden detectarse para lanzar
una acción, como por ejemplo que el usuario haga click en un elemento (onclick), que elija una
opción de un desplegable (onselect), que pase el ratón sobre un objeto (onmouseover), etc.

Compilar
Compilar es generar código ejecutable por una máquina, que puede ser física o abstracta 
como la máquina virtual de Java.

Transpilar
Transpilar es generar a partir de código en un lenguaje código en otro lenguaje. Es decir, un
programa produce otro programa en otro lenguaje cuyo comportamiento es el mismo que el
original.