A linguagem JavaScript é amplamente utilizada no desenvolvimento moderno, tanto em aplicações executadas no navegador quanto em ambientes de servidor, como o Node.js. Um de seus aspectos mais importantes — e frequentemente cobrado em concursos públicos — é o modelo de programação assíncrona, que permite lidar com operações demoradas sem interromper a execução do restante do código.
Entender como o JavaScript trata o assincronismo é essencial para compreender o funcionamento de aplicações web modernas, APIs e sistemas escaláveis. Esse tema aparece de forma recorrente em provas ao abordar conceitos como event loop, Promises e o uso das palavras-chave async e await, exigindo do candidato não apenas conhecimento sintático, mas também compreensão do modelo de execução da linguagem.
O Modelo de Execução do JavaScript
Diferentemente de linguagens tradicionais que utilizam múltiplas threads de execução, o JavaScript opera, por padrão, é um modelo single-thread, ou seja, apenas uma instrução é executada por vez. À primeira vista, isso poderia parecer uma limitação, mas a linguagem foi projetada para lidar eficientemente com operações assíncronas por meio de um modelo baseado em eventos.
Nesse modelo, tarefas que demandam mais tempo, como requisições de rede, acesso a arquivos ou temporizadores, não bloqueiam a execução do programa. Em vez disso, essas operações são delegadas ao ambiente de execução, permitindo que o JavaScript continue processando outras instruções.
O que é Programação Assíncrona
Programação assíncrona é uma abordagem que permite iniciar uma operação e continuar executando outras tarefas enquanto se aguarda sua conclusão. Em JavaScript, isso é fundamental para garantir que aplicações permaneçam responsivas, especialmente em ambientes interativos como navegadores.
Sem o uso do assincronismo, qualquer operação demorada poderia “congelar” a aplicação, prejudicando a experiência do usuário. Por isso, o JavaScript foi projetado desde o início para trabalhar com eventos e callbacks, evoluindo posteriormente para mecanismos mais sofisticados.
O Event Loop
O event loop é o mecanismo central responsável por coordenar a execução do código assíncrono em JavaScript. Ele atua monitorando continuamente a call stack (pilha de execução) e as filas de tarefas, verificando quando uma função pode ser executada.
Quando o código síncrono termina de ser processado, o event loop verifica se há callbacks ou Promises resolvidas aguardando execução. Caso exista, essas funções são movidas para a call stack, respeitando a ordem definida pelo modelo de filas. Esse processo garante que o JavaScript consiga lidar com múltiplas operações assíncronas mesmo sendo single-thread.
Promises
Uma Promise é um objeto que representa a eventual conclusão ou falha de uma operação assíncrona. Ela permite encapsular o resultado futuro de uma tarefa que ainda não foi concluída no momento da execução.
Toda Promise pode assumir três estados:
- pending (pendente): estado inicial;
- fulfilled (cumprida): quando a operação é concluída com sucesso;
- rejected (rejeitada): quando ocorre algum erro.
Esse modelo torna o código mais previsível e organizado, substituindo o uso excessivo de callbacks aninhados.
async e await
As palavras-chave async e await foram introduzidas para tornar o código assíncrono mais legível e próximo da escrita síncrona tradicional. Uma função declarada com async passa automaticamente a retornar uma Promise.
A palavra-chave await permite pausar a execução da função async até que a Promise seja resolvida ou rejeitada. Importante destacar que essa pausa ocorre apenas dentro da função, sem bloquear o event loop, o que mantém o comportamento assíncrono da linguagem.
setTimeout e Ordem de Execução
Funções como setTimeout são frequentemente utilizadas para ilustrar o funcionamento do event loop. Mesmo quando o tempo é definido como zero, o callback não é executado imediatamente.
Isso ocorre porque o callback é colocado na fila de tarefas e somente será executado após todo o código síncrono atual ser finalizado. Esse comportamento é uma fonte comum de confusão e aparece com frequência em questões de concurso que pedem a ordem correta das saídas no console.
Assincronismo no Node.js
No ambiente Node.js, o modelo assíncrono é ainda mais relevante, pois o servidor precisa lidar com múltiplas conexões simultâneas. Apesar de ser single-thread, o Node.js utiliza mecanismos internos para tratar operações de I/O (entrada/saída) de forma não bloqueante, delegando essas tarefas ao sistema operacional.
Esse modelo torna o Node.js eficiente para aplicações que realizam grande volume de operações de rede, como APIs e sistemas distribuídos.
Vamos ver como isso é cobrado nos concursos!
1) Ano: 2025 Banca: IDCAP Órgão: HEMOBA Prova: IDCAP – 2025 – HEMOBA – Analista Técnico – Área de Atuação: Análise de Sistemas
O JavaScript moderno, especialmente no ambiente de navegadores e Node.js, lida com operações assíncronas por meio de um modelo de concorrência baseado em um “event loop” (laço de eventos). Acerca do funcionamento do assincronismo em JavaScript, registre V, para as afirmativas verdadeiras, e F, para as falsas:
(__)O uso da sintaxe async/await elimina a necessidade do event loop, permitindo que o JavaScript execute múltiplas operações de I/O em paralelo em threads separadas, bloqueando a execução da função async até que a Promise seja resolvida.
(__)Uma Promise em JavaScript representa a eventual conclusão (ou falha) de uma operação assíncrona e seu valor resultante, possuindo três estados possíveis: pendente (pending), cumprida (fulfilled) ou rejeitada (rejected).
(__)O setTimeout(callback, 0) garante que a função callback será executada imediatamente, antes de qualquer outro código no script, pois o tempo de espera é zero.
(__)Uma função declarada com a palavra-chave async sempre retorna uma Promise. Se a função retornar um valor, a Promise será resolvida com esse valor; se a função lançar uma exceção, a Promise será rejeitada com essa exceção.
Após análise, assinale a alternativa que apresenta a sequência correta dos itens acima, de cima para baixo:
Alternativas
- F, F, V, F.
- F, V, F, F.
- F, V, F, V.
- V, F, F, V.
- F, V, V, F.
Gabarito: C
Comentário:
- A primeira afirmativa está incorreta, pois o uso de async/await não elimina o event loop nem cria múltiplas threads. O JavaScript continua single-thread, e a execução não é bloqueada globalmente.
- A segunda afirmativa está correta, pois descreve corretamente o conceito e os estados de uma Promise.
- A terceira afirmativa está incorreta, já que setTimeout(callback, 0) não garante execução imediata; o callback depende da liberação da call stack.
- A quarta afirmativa está correta, pois toda função declarada com async retorna uma Promise, resolvida ou rejeitada conforme o fluxo de execução.
2) Ano: 2025 Banca: IDCAP Órgão: IPJB Prova: IDCAP – 2025 – IPJB – Tecnologista – Tecnologia da Informação Aplicada a Conservação da Biodiversidade
Sobre o uso de async, await e event loop em JavaScript, analise as afirmações a seguir:
- A palavra-chave async permite definir funções que operam de forma assíncrona, similar ao comportamento de Promises.
- await pode ser utilizado em qualquer função JavaScript para aguardar a resolução de uma Promise, tornando o código mais legível e evitando callbacks aninhados.
- O Event Loop é um mecanismo que permite a execução de código JavaScript em uma única thread, gerenciando eventos assíncronos como requisições de rede e timers.
É correto o que se afirma em:
- I, apenas.
- I e III, apenas.
- III, apenas.
- I, II e III.
- II, apenas.
Gabarito: B
Comentário:
- A afirmativa I está correta, pois funções async encapsulam Promises e permitem escrita assíncrona.
- A afirmativa II está incorreta, já que await só pode ser utilizado dentro de funções declaradas com async.
- A afirmativa III está correta, pois descreve adequadamente o papel do event loop na execução assíncrona em uma única thread.
Conclusão
A programação assíncrona é um dos pilares do JavaScript moderno e está diretamente relacionada à eficiência, escalabilidade e responsividade das aplicações. Conceitos como event loop, Promises e async/await aparecem com frequência crescente em concursos públicos, exigindo do candidato compreensão conceitual e atenção aos detalhes do modelo de execução.
Dominar esses temas não apenas melhora a qualidade do código, mas também aumenta significativamente o desempenho em provas da área de Tecnologia da Informação.
Referências
- FLANAGAN, David. JavaScript: The Definitive Guide. O’Reilly Media.
- SIMPSON, Kyle. You Don’t Know JS Yet: Async & Performance. O’Reilly Media.
- ECMA International. ECMAScript Language Specification (ES2023).
- Mozilla Developer Network (MDN). Concurrency model and Event Loop.
- Node.js Documentation. Event Loop, Timers, and Async Behavior.
![[REINVENÇÃO 2026] Última semana R$ 54,90 – Cabeçalho](https://blog-static.infra.grancursosonline.com.br/wp-content/uploads/2026/01/21121438/CABECALHO-1238X216-1.webp)
![[REINVENÇÃO 2026] Última semana R$ 54,90 – Post](https://blog-static.infra.grancursosonline.com.br/wp-content/uploads/2026/01/21121813/POST-730X150-1.webp)