¿Cuál es el orden de ejecución de este código JavaScript?
Dificultad: Avanzado
const tom = () => console.log('Tom');
const jerry = () => console.log('Jerry');
const cartoon = () => {
console.log('Cartoon');
setTimeout(tom, 5000);
new Promise((resolve, reject) =>
resolve('should it be right after Tom, before Jerry?')
).then(resolve => console.log(resolve))
jerry();
}
cartoon();
A. Cartoon, Jerry, should it be right after Tom, before Jerry?, Tom
B. Tom, Jerry, Cartoon, should it be right after Tom, before Jerry?
C. Cartoon, Jerry, Tom, should it be right after Tom, before Jerry?
D. Ninguna de las anteriores.
Respuesta en el primer comentario.
Top comments (1)
Respuesta:
A.
Cartoon,Jerry,should it be right after Tom, before Jerry?,TomPara responder fácilmente esta pregunta se debe tener un dominio del Even Loop de JavaScript.
El interprete del lenguaje recorre todo el código hasta llegar a la primera y única invocación de función en la última línea de código del ejemplo.
Entramos a la función
cartoon:Cartoonpor que solo es unlogsíncrono.setTimeoutes una Web API por ende no entra al Call Stack sino que se debe esperar5000 mspara que ingrese en el Task Queue.logsíncrono, imprimimosJerryAhora, regresemos al
setTimeouty a la promesa.¿Cómo hace JavaScript para determinar que imprimir primero?
En este punto el Even Loop ya verifico que el Call Stack esta vacío.
Entonces, en este caso en particular las promesas almacenadas en el Micro Task Queue tienen prioridad sobre cualquier Web API, por ello, es la promesa la que pasa primero al Call Stack y mostramos por consola
should it be right after Tom, before JerrySolo nos queda el
setTimeout, y ahora mostramosTompasados los5000 ms