Vou dar uma resposta ligeiramente diferente aqui: Sim, tanto o bloco trye finallysã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
trye finallyirá 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 tryem 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 returndentro de um finallybloco . 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 finallyapenas 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 tryou catch. Mas esses dois últimos são os blocos de construção reais do tratamento de erros. Basta usar um returnem trye em catchvez disso.