Qual a vantagem dessa abordagem apresentada (utilizando um callback) sobre o uso de um throw para lançar o erro (e depois capturá-lo e tratá-lo na controller) e de o retorno do método ser a lista de negociações?
Qual a vantagem dessa abordagem apresentada (utilizando um callback) sobre o uso de um throw para lançar o erro (e depois capturá-lo e tratá-lo na controller) e de o retorno do método ser a lista de negociações?
Você esta se referindo ao padrão Error First Callback? (estou me baseando no link da sua pergunta, que aponta para essa parte). Se for, lembre-se que o xmlhttprequest executa uma operação assíncrona e você não poderá fazer try e catch pois a operação não estará na pilha de execução. Por isso, segundo o padrão difundindo pelo Node.js, passamos o erro primeiro seguido do resultado da operação.
Todavia, há uma forma mais elegante de fazer isso que é através de Promises e que você aprenderá no curso.
Um simples teste que mostra que JavaScript não é Java (digo isso porque você fez cursos de Java). Lembre-se, operações assíncronas não são capturadas via try e catch porque não estão na pilha de execução:
<script>
const metodoAsync = () =>
setTimeout(() => {
throw new Error('Nunca serei pego!');
})
try {
metodoAsync();
} catch(err) {
console.log('Nunca vai chegar aqui!');
console.log(err);
}
</script>
Obrigado, Flávio!