Vi la presentación de Philip Roberts sobre el bucle de eventos ( https://www.youtube.com/watch?v=8aGhZQkoFbQ&ab_channel=JSConf ) y no pude entender todo.
Él dice que las WebAPI no se ejecutan directamente en la pila de llamadas, se empujan dentro de esta sección específica para WebAPI y luego, cuando su temporizador termina (si tienen uno), se empujan en la cola de tareas. (La charla sobre el bucle de eventos comienza a las 12:50)
En https://developer.mozilla.org/en-US/docs/Web/API , vi que la console también es una WebAPI.
¿ console.log() también se inserta en la cola de tareas, o solo las WebAPI que tienen un temporizador determinado, como setTimeout o esperan un evento determinado (como un detector de eventos de clic en un botón en DOM) se insertan en la tarea? cola ?
Esto es lo que he intentado hasta ahora para responder a esa pregunta:
En el minuto 13:45 dice esto:
El trabajo del bucle de eventos es mirar la pila y mirar la cola de tareas. Si la pila está vacía, toma lo primero en la cola y lo empuja a la pila.
Sin embargo, si ejecuto este código:
console.log("log 1"); while(true){} console.log("log 2"); Obtendré el log 1 en la consola, y luego toda la pestaña se bloqueará debido a la declaración while(true) . ¿Significa eso que console.log() se ejecuta directamente y no se inserta en la cola de tareas? Si se colocara en la cola de tareas, esperaría a que la pila de llamadas esté vacía; sin embargo, la pila de llamadas no puede estar vacía porque tengo la declaración while(true) que se ejecutará para siempre. El console.log("log 1") todavía se ejecuta, incluso si console es una WebAPI. ¿Eso significa que console.log() no se inserta en la cola de tareas y solo las WebAPI que tienen un temporizador, como setTimeout , o esperan a que se active un evento como addEventListener de DOM WebAPI, se insertan en la cola de tareas?
Solo las WebAPI asincrónicas, como DOM Events, fetch, setTimeout, setInterval, etc. se envían a la cola de devolución de llamadas. Las WebAPI síncronas, como la consola, por ejemplo, se ejecutan directamente, sin que se pongan en cola en la cola de devolución de llamada.