2
respostas

Quando usar o try e catch?

async atualizaRegistro(dadosAtualizados, id) {
    const listadeRegistrosAtualizados = dataSource[this.model].update(dadosAtualizados, {
      where: { id: id }
    });
    if (listadeRegistrosAtualizados[0] === 0) {
      return false;
    }
    return true;
  }

Eu sempre fico com dúvida de quando devo ou não usar o Try/Catch. Nesse caso é preciso usar? E outra dúvida é que pode ocorrer mais de um tipo de erro, como eu vou saber todos os tipos de erros para montar um classe de erro para cada tipo de erro?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas

Se uma operação pode falhar de forma imprevisível (rede, banco, APIs externas) e/ou quebrar a aplicação, use try/catch.
O try, como o próprio termo diz, vai tentar executar algum bloco de código, caso não consiga, o catch pega o problema e faz algo. Isso faz com que a aplicação permaneça executando sem quebrar e você consegue preparar seu código para lidar com as exceções.
No seu caso, que envolve async/await o ideal é SEMPRE utilizar.

Sobre criar classe para lidar com todos os tipos de erro, acaba sendo inviável porque há diversos erros, geralmente no catch se usar uma classe de genérica para capturar ele e o próprio dev realizar o debug. Testes unitários ajudam também a evitar que erros ocorram.

No seu caso:

async atualizaRegistro(dadosAtualizados, id) {
  try {
    if (!id || !dadosAtualizados) {
      return { sucesso: false, erro: 'ID e dados são obrigatórios' };
    }

    const [numRegistrosAtualizados] = await dataSource[this.model].update(dadosAtualizados, {
      where: { id: id }
    });
    
    if (numRegistrosAtualizados === 0) {
      return { 
        sucesso: false, 
        erro: 'Registro não encontrado' 
      };
    }
    
    return { 
      sucesso: true, 
      registrosAtualizados: numRegistrosAtualizados 
    };
    
  } catch (error) {
    console.error('Erro ao atualizar registro:', {
      id,
      erro: error.message
    });
    
    return { 
      sucesso: false, 
      erro: 'Erro interno do sistema' 
    };
  }
}

Em vez de usar os "returns" não seria melhor fazer como tu falou que é criar um middleware de erro, uma classe de erro genérica como "ErroBase" e a partir dessa classe criar algumas classes específicas de erros como "ErroValidacao", "ErroNaoEncontrado", ErroCampoDuplicado, etc?