Vou dar uma resposta ligeiramente diferente aqui: Sim, tanto o bloco try
e finally
são executados, efinally
têm precedência sobre o valor de "retorno" real de uma função. No entanto, esses valores de retorno nem sempre são usados em seu código.
Aqui está o porquê:
- O exemplo abaixo usará
res.send()
de Express.js, que cria uma resposta HTTP e a despacha.
- O seu bloco
try
e finally
irá executar esta função da seguinte forma:
try {
// Get DB records etc.
return res.send('try');
} catch(e) {
// log errors
} finally {
return res.send('finally');
}
Este código mostrará a string try
em seu navegador. TAMBÉM, o exemplo mostrará um erro em seu console. A res.send()
função é chamada duas vezes . Isso acontecerá com qualquer coisa que seja uma função. O bloco try-catch-finally vai ofuscar esse fato para o olho não treinado, porque (pessoalmente) eu só associoreturn
valores com escopos de função.
Imho sua melhor aposta é nunca usar return
dentro de um finally
bloco . Isso complicará demais o seu código e, potencialmente, mascarará os erros.
Na verdade, há uma configuração de regra de inspeção de código padrão no PHPStorm que fornece um "Aviso" para isso:
https://www.jetbrains.com/help/phpstorm/javascript-and-typescript-return-inside-finally-block.html
Então, para que você usa finally
?
Eu usaria finally
apenas para limpar coisas. Qualquer coisa que não seja crítica para o valor de retorno de uma função.
Pode fazer sentido se você pensar sobre isso, porque quando você depende de uma linha de código abaixo finally
, está assumindo que pode haver erros em try
ou catch
. Mas esses dois últimos são os blocos de construção reais do tratamento de erros. Basta usar um return
em try
e em catch
vez disso.