Sto andando dare una risposta un po 'diverso qui: Si, sia l' trye finallyblocco vengono eseguiti, e finallyha la precedenza sul valore effettivo "ritorno" per una funzione. Tuttavia, questi valori restituiti non vengono sempre utilizzati nel codice.
Ecco perché:
- L'esempio seguente userà
res.send()da Express.js, che crea una risposta HTTP e la invia.
- Il tuo
trye finallyblocco eseguirà sia questa funzione in questo modo:
try {
// Get DB records etc.
return res.send('try');
} catch(e) {
// log errors
} finally {
return res.send('finally');
}
Questo codice mostrerà la stringa trynel tuo browser. INOLTRE, l'esempio mostrerà un errore nella tua console. La res.send()funzione viene chiamata due volte . Questo accadrà con tutto ciò che è una funzione. Il blocco try-catch-latest offuscherà questo fatto a un occhio inesperto, perché (personalmente) associo i returnvalori solo agli ambiti delle funzioni.
Imho la tua scommessa migliore è non usare mai returnall'interno di un finallyblocco . Complicherà eccessivamente il codice e potenzialmente maschererà gli errori.
In effetti, in PHPStorm esiste una regola di ispezione del codice predefinita che fornisce un "Avviso" per questo:
https://www.jetbrains.com/help/phpstorm/javascript-and-typescript-return-inside-finally-block.html
Allora per cosa usi finally?
Userei finallysolo per ripulire le cose. Tutto ciò che non è critico per il valore restituito di una funzione.
Può avere senso se ci pensi, perché quando dipendi da una riga di codice sotto finally, stai assumendo che potrebbero esserci errori in tryo catch. Ma questi ultimi 2 sono gli elementi costitutivi reali della gestione degli errori. Basta usare un returnin trye catchinvece.