O handler roda de forma síncrona até bater no await, aí ele devolve o controle para o navegador e agenda o resto da função como uma microtask. Assim que a promise aguardada resolve, essa continuação vai para a fila de microtasks, que é drenada por completo depois da task atual e antes do próximo timer ou pintura de tela. Então o await nunca bloqueia a main thread; ele parte a função em duas.
Por que os entrevistadores perguntam isso
Assincronia é onde muitos desenvolvedores têm um modelo mental nebuloso. O entrevistador quer saber se você entende que o JavaScript é single thread e cooperativo em vez de magicamente paralelo, porque é esse entendimento que impede você de escrever um handler que mata a renderização ou um loop disparando duzentas requisições em sequência. Isso também prevê o quão bem você vai raciocinar sobre condições de corrida, cancelamento e estado desatualizado mais adiante.
Como estruturar sua resposta
- Diga que o JavaScript roda uma pilha de chamadas por vez.
- Descreva como o await suspende a função e devolve a thread.
- Separe a fila de microtasks da fila de tasks.
- Termine com uma consequência prática, como usar await dentro de um loop.
Exemplo de resposta
Claro. O handler começa na main thread como qualquer outra função, e tudo até o primeiro await roda de forma síncrona. No await, a função suspende e devolve uma promise para quem a chamou, então o navegador recupera a thread e consegue pintar a tela. Quando a promise aguardada resolve, o restante da função é empurrado para a fila de microtasks, não para a fila de tasks. Isso importa porque as microtasks são drenadas por completo antes de o navegador pegar o próximo timer ou o próximo frame, então uma cadeia longa de resoluções de promise ainda consegue bloquear a renderização mesmo sem nada tecnicamente síncrono. A versão prática disso me pegou em um dashboard em que eu trabalhei. A gente estava usando await dentro de um for loop sobre umas 300 linhas, então cada requisição esperava a anterior e a página levava 12 segundos para preencher. Trocar por Promise.all com um limite pequeno de concorrência derrubou isso para menos de um segundo. Mesmo código, mesma thread, comportamento completamente diferente.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Onde os callbacks de requestAnimationFrame entram em relação às microtasks?
- Como você cancelaria esse trabalho em andamento se o componente desmontar?
- O que acontece se uma dessas promises aguardadas rejeitar e nada capturar isso?
Mais perguntas para Desenvolvedor Full Stack
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas