Questão de Programação — JavaScript — INSTITUTO AOCP 2023
Programação›JavaScript
Código
qq971016
Banca
INSTITUTO AOCP
Órgão
IF-MA
Ano
2023
Nível
Superior
Cargo
Analista De Tecnologia Da Informação - Desenvolvimento De Sistemas
No JavaScript, a execução de código assíncrono pode ser gerenciada de várias maneiras. A respeito de como lidar com a execução assíncrona de código JavaScript, assinale a alternativa INCORRETA.
AUtilizar callbacks, em que uma função é passada como argumento para outra função e é chamada quando a execução assíncrona é concluída.
BUtilizar Promises, que representam o resultado de uma operação assíncrona que pode ser concluída no futuro.
CUtilizar async/await, que permite escrever código assíncrono de maneira síncrona, facilitando a legibilidade do código.
DUtilizar generators, que permitem a criação de funções cuja execução pode ser suspensa e retomada posteriormente.
EUtilizar o operador "sincrono" para forçar a execução síncrona do código assíncrono.
Revelar gabarito e comentário▾
GabaritoE — Utilizar o operador "sincrono" para forçar a execução síncrona do código assíncrono.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
JavaScript: Assincronismo e Formas de Gerenciamento
Gabarito: letra E. A alternativa incorreta é a que menciona o operador "sincrono" para forçar a execução síncrona de código assíncrono, pois não existe tal operador em JavaScript. As demais alternativas descrevem corretamente os mecanismos de callbacks, Promises, async/await e generators, que são as formas reais de lidar com a execução assíncrona na linguagem.
O JavaScript é uma linguagem single-threaded, ou seja, executa o código em uma única thread principal. Para lidar com operações demoradas, como requisições de rede ou leitura de arquivos, sem bloquear a execução do programa, a linguagem utiliza o modelo de assincronismo. Nesse modelo, operações que levariam tempo são iniciadas e o código continua executando, sendo o resultado tratado posteriormente, quando a operação é concluída. Os principais mecanismos para gerenciar esse comportamento são:
Callbacks: funções passadas como argumento para outras funções, que são chamadas quando a operação assíncrona termina. É a forma mais antiga e simples, mas pode levar ao chamado "callback hell" quando há muitas operações encadeadas.
Promises: objetos que representam o resultado futuro de uma operação assíncrona. Elas podem estar em três estados: pending (pendente), fulfilled (concluída com sucesso) ou rejected (rejeitada com erro). Permitem encadear operações com .then() e tratar erros com .catch().
async/await: uma sintaxe mais moderna que permite escrever código assíncrono de forma semelhante ao código síncrono, facilitando a leitura e a manutenção. A palavra-chave async marca uma função como assíncrona, e await pausa a execução até que uma Promise seja resolvida.
Generators: funções que podem ser pausadas e retomadas, usando yield para emitir valores e next() para continuar a execução. Embora não sejam especificamente para assincronismo, podem ser usados para controlar fluxos assíncronos de forma mais complexa.
A alternativa E inventa um operador chamado "sincrono", que não existe na linguagem. Não há como "forçar" a execução síncrona de código assíncrono em JavaScript; o que se faz é usar os mecanismos acima para gerenciar a assincronia de forma adequada. A banca explora exatamente essa confusão, criando um termo que parece plausível, mas que não tem fundamento na linguagem.
NÃO CAIA NESSA!
A banca cria um termo fictício, "operador sincrono", para induzir o candidato a acreditar que existe uma forma de forçar a execução síncrona. Em JavaScript, não há tal operador; o que existe são os mecanismos de callbacks, Promises, async/await e generators para lidar com a assincronia. Fique atento a termos que não fazem parte da linguagem.
Assincronismo em JS
1Modelo
Single-threaded
Operações demoradas não bloqueiam
2Mecanismos reais
Callbacks
Função passada como argumento
Chamada ao concluir
Promises
Resultado futuro
Estados: pending, fulfilled, rejected
async/await
Código assíncrono com aparência síncrona
await pausa até resolver
Generators
Execução suspensa/retomada
yield e next()
3Operador "sincrono"
Não existe em JS
Termo fictício da banca
LEVEL · soulevel.com.br
Alternativa A — ✅ Correta
A descrição de callbacks está correta. Uma função de callback é passada como argumento para outra função e é invocada quando a operação assíncrona é concluída. Esse é um dos mecanismos fundamentais de assincronismo em JavaScript, amplamente utilizado em funções como setTimeout, setInterval e em APIs de eventos.
Alternativa B — ✅ Correta
Promises são objetos que representam o resultado de uma operação assíncrona que pode ser concluída no futuro. Elas possuem três estados: pending, fulfilled e rejected, e são a base para o tratamento de operações assíncronas de forma mais estruturada, permitindo encadeamento e tratamento de erros.
Alternativa C — ✅ Correta
A sintaxe async/await permite escrever código assíncrono de maneira síncrona, melhorando a legibilidade. Uma função declarada com async retorna uma Promise, e o operador await pausa a execução até que a Promise seja resolvida, tornando o código mais linear e fácil de entender.
Alternativa D — ✅ Correta
Generators são funções que podem ter sua execução suspensa e retomada posteriormente, usando yield para pausar e next() para continuar. Embora não sejam exclusivamente para assincronismo, são uma ferramenta poderosa para controlar fluxos de execução, incluindo operações assíncronas.
Alternativa E — ❌ Incorreta ⟵ GABARITO
A alternativa afirma que existe um operador "sincrono" para forçar a execução síncrona de código assíncrono, o que é falso. Não existe tal operador em JavaScript. A linguagem não oferece uma forma de "forçar" a execução síncrona de operações assíncronas; em vez disso, fornece os mecanismos de callbacks, Promises, async/await e generators para gerenciar a assincronia. A banca criou um termo fictício para testar o conhecimento do candidato sobre os recursos reais da linguagem.
Gabarito: letra E — a única alternativa incorreta, pois inventa um operador que não existe em JavaScript.