Je vais donner une réponse légèrement différente ici: Oui, le bloc tryet finallyest exécuté et finallya 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
tryet finallybloc 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 trydans 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 returnvaleurs aux portées de fonction.
À mon avis, votre meilleur pari est de ne jamais utiliser à l' returnintérieur d'un finallybloc . 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 finallyque 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 tryou catch. Mais ces deux derniers sont les éléments de base de la gestion des erreurs. Utilisez simplement un returnin tryet à la catchplace.