Sto andando dare una risposta un po 'diverso qui: Si, sia l' try
e finally
blocco vengono eseguiti, e finally
ha 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
try
e finally
blocco 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 try
nel 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 return
valori solo agli ambiti delle funzioni.
Imho la tua scommessa migliore è non usare mai return
all'interno di un finally
blocco . 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 finally
solo 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 try
o catch
. Ma questi ultimi 2 sono gli elementi costitutivi reali della gestione degli errori. Basta usare un return
in try
e catch
invece.