El manejador se ejecuta de forma síncrona hasta que llega a await, entonces devuelve el control al navegador y programa el resto de la función como una microtarea. Cuando la promesa esperada se resuelve, esa continuación entra en la cola de microtareas, que se vacía por completo tras la tarea actual y antes del siguiente temporizador o pintado. Así que await nunca bloquea el hilo principal; parte la función en dos.
Por qué lo preguntan los entrevistadores
Lo asíncrono es donde muchos desarrolladores tienen un modelo mental borroso. El entrevistador quiere saber si entiendes que JavaScript es de un solo hilo y cooperativo, no mágicamente paralelo, porque ese entendimiento es lo que evita que escribas un manejador que deja sin aire al renderizado o un bucle que dispara doscientas peticiones seguidas. También predice cómo razonarás luego sobre condiciones de carrera, cancelación y estado obsoleto.
Cómo estructurar tu respuesta
- Di que JavaScript ejecuta una pila de llamadas cada vez.
- Describe cómo await suspende la función y devuelve el hilo.
- Separa la cola de microtareas de la cola de tareas.
- Termina con una consecuencia práctica, como hacer await dentro de un bucle.
Ejemplo de respuesta
Claro. El manejador arranca en el hilo principal como cualquier otra función, y todo lo anterior al primer await se ejecuta de forma síncrona. En el await, la función se suspende y devuelve una promesa a quien la llamó, así que el navegador recupera el hilo y puede pintar. Cuando la promesa esperada se resuelve, el resto de la función se empuja a la cola de microtareas, no a la de tareas. Eso importa porque las microtareas se vacían del todo antes de que el navegador coja el siguiente temporizador o el siguiente fotograma, así que una cadena larga de resoluciones de promesas puede seguir bloqueando el renderizado aunque técnicamente nada sea síncrono. La versión práctica de esto me mordió en un panel en el que trabajé. Hacíamos await dentro de un bucle for sobre unas 300 filas, así que cada petición esperaba a la anterior y la página tardaba 12 segundos en llenarse. Pasar a Promise.all con un pequeño límite de concurrencia lo bajó por debajo de un segundo. El mismo código, el mismo hilo, un comportamiento completamente distinto.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Dónde encajan las callbacks de requestAnimationFrame respecto a las microtareas?
- ¿Cómo cancelarías ese trabajo en vuelo si el componente se desmonta?
- ¿Qué pasa si una de esas promesas esperadas se rechaza y nadie la captura?
Más preguntas para Desarrollador full stack
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas