Je vais donner une réponse légèrement différente ici: Oui, le bloc try
et finally
est exécuté et finally
a la priorité sur la valeur de "retour" réelle d'une fonction. Cependant, ces valeurs de retour ne sont pas toujours utilisées dans votre code.
Voici pourquoi:
- L'exemple ci-dessous utilisera
res.send()
Express.js, qui crée une réponse HTTP et la distribue.
- Votre
try
et finally
bloc sera à la fois exécuter cette fonction comme ceci:
try {
// Get DB records etc.
return res.send('try');
} catch(e) {
// log errors
} finally {
return res.send('finally');
}
Ce code affichera la chaîne try
dans votre navigateur. AUSSI, l'exemple montrera une erreur dans votre console. La res.send()
fonction est appelée deux fois . Cela se produira avec tout ce qui est une fonction. Le bloc try-catch-finally obscurcira ce fait à l'œil non averti, car (personnellement) j'associe uniquement des return
valeurs aux portées de fonction.
À mon avis, votre meilleur pari est de ne jamais utiliser à l' return
intérieur d'un finally
bloc . Cela compliquera trop votre code et masquera potentiellement les erreurs.
En fait, il existe une règle d'inspection de code par défaut configurée dans PHPStorm qui donne un "Avertissement" pour ceci:
https://www.jetbrains.com/help/phpstorm/javascript-and-typescript-return-inside-finally-block.html
Alors qu'est-ce que tu utilises finally
?
Je n'utiliserais finally
que pour nettoyer des trucs. Tout ce qui n'est pas critique pour la valeur de retour d'une fonction.
Cela peut avoir du sens si vous y réfléchissez, car lorsque vous dépendez d'une ligne de code sous finally
, vous supposez qu'il pourrait y avoir des erreurs dans try
ou catch
. Mais ces deux derniers sont les éléments de base de la gestion des erreurs. Utilisez simplement un return
in try
et à la catch
place.