Questão nº 46
Questão de Tecnologia da Informação · FCC TRT20 2024 (nº 46)
Um servidor Node.js precisa processar várias chamadas de API assíncronas para realizar operações em um banco de dados. É necessário garantir que as operações sejam executadas na ordem correta e que os erros sejam tratados adequadamente, evitando que falhas comprometam a execução das próximas chamadas. Nesse contexto e em condições ideais, a maneira mais apropriada de estruturar o código para garantir a sequência correta e o tratamento de erros adequado é
- Ausar `Promise.all()` para garantir a ordem e ignorar o tratamento de erros, já que o Node.js gerencia os erros automaticamente.
- Benvolver as chamadas assíncronas em um bloco `try/catch` e usar `await`. (alternativa correta)
- Cusar `then()`, `catch()`, `finally()` e `execute()` em todas as chamadas de métodos da classe `Connection`.
- Dfazer todas as chamadas assíncronas usando a função `async`/`await` com `try/catch` para tratar as exceções.
- Ecolocar todas as chamadas assíncronas em uma função `setTimeout` com `throws` para tratar exceções.
Resposta comentada
Gabarito Alternativa B
Em Node.js, quando precisamos executar operações assíncronas em uma ordem específica e garantir que falhas sejam tratadas sem interromper o fluxo, usamos funções assíncronas (async) com a palavra-chave await para pausar a execução e try/catch para capturar erros.
- (A) Incorreta:
Promise.all()executa Promises em paralelo, não em sequência, e falha se qualquer uma das Promises falhar, sem garantir a ordem de execução das operações subsequentes. Ignorar o tratamento de erros é uma má prática e pode levar a dados inconsistentes ou falhas inesperadas no sistema. - (B) Correta: Usar
awaitdentro de uma funçãoasyncgarante que cada chamada assíncrona seja concluída antes que a próxima comece, assegurando a sequência correta. O blocotry/catchenvolve essas chamadas, permitindo que erros (rejeições de Promises) sejam capturados e tratados de forma controlada, evitando que uma falha em uma operação comprometa as demais. - (C) Incorreta: Embora
then(),catch()efinally()sejam válidos para Promises, encadear muitos deles pode levar a um código menos legível (o "callback hell"). A menção deexecute()como método da classeConnectioné específica demais e não representa uma solução genérica de estruturação.async/awaité geralmente preferível para sequências complexas por sua clareza. - (D) Incorreta: Esta alternativa é um distrator muito forte e descreve uma abordagem correta. No entanto, a alternativa (B) é ligeiramente mais precisa ao focar na estrutura do
try/catchenvolvendo as chamadasawait. A frase "envolver as chamadas assíncronas em um blocotry/catche usarawait" descreve diretamente a sintaxe e a prática de como estruturar o código para o tratamento de erros em operações sequenciais, enquanto (D) é uma descrição mais geral do uso deasync/awaitcomtry/catch. Para a pergunta sobre "estruturar o código", a descrição de (B) é mais direta sobre a colocação dotry/catch. - (E) Incorreta:
setTimeoutserve para agendar a execução de código após um atraso, não para garantir a ordem de operações assíncronas de banco de dados ou para tratamento de erros robusto. A palavrathrowsnão é uma palavra-chave para tratamento de exceções em JavaScript da forma como é sugerida.
Fonte: FCC TRT20 2024 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 003). Reproduzida para fins de estudo.