Aquí tienes una excelente pregunta de entrevista de #javascript
Aquí tienes una excelente pregunta de entrevista de #javascript.
¿Qué demonios está haciendo async/await bajo el capó?
Me alegra que lo hayas preguntado...
JavaScript es un lenguaje síncrono, lo que significa que cada línea de código se ejecuta una tras otra.
JavaScript conoce el orden en que deben ejecutarse las funciones según su pila de llamadas.
Las funciones se cargan en la pila de llamadas y se ejecuta la primera función que entra es la primera que sale.
Es importante tener en cuenta que la pila de llamadas prioriza todo el código global antes de que el bucle de eventos busque en otras pilas para ejecutar código.
Cuando una función se etiqueta como async al principio, obtenemos acceso a una palabra clave muy especial llamada await.
Await puede colocarse frente a cualquier promesa.
Puedes pensar en una promesa como un objeto que contiene 2 propiedades ocultas: Valor y onFulfilled.
Tan pronto como la ejecución de JavaScript se encuentra con un await Promise, utiliza una API del navegador web para hacer algo, como buscar algunos datos.
Mientras esos datos se están recuperando en segundo plano, JavaScript continúa ejecutando más código global.
Sin embargo, dado que usamos la palabra clave await, no hay más código global.
Todo el código debajo de ese await se carga en una propiedad onFufilled oculta de la promesa original del await.
Esto significa que cuando se devuelve un valor desde la API del navegador web, inmediatamente ese código onFufilled se mueve a la cola de microtareas, recogido por el bucle de eventos, colocado en la pila de llamadas y ejecutado.
Entonces, en realidad, JavaScript mantiene su naturaleza síncrona y es capaz de ejecutar este código asíncrono uno tras otro.
Una forma fácil de recordarlo es que la promesa se ejecuta, el valor regresa, todo el código debajo de ella se expone a la pila de llamadas para ser ejecutado ya que ese valor se cumplió.
Para mejorar tus entrevistas, el próximo 10 de Febrero estaré impartiendo una clase gratuita para ayudar a ingenieros de software a mejorar su carrera.
Envíame un mensaje o comenta "clase" si deseas asistir.