Ich werde hier eine etwas andere Antwort geben: Ja, sowohl der try
als auch der finally
Block werden ausgeführt und haben finally
Vorrang vor dem tatsächlichen "Rückgabewert" für eine Funktion. Diese Rückgabewerte werden jedoch nicht immer in Ihrem Code verwendet.
Hier ist der Grund:
- Das folgende Beispiel wird verwendet
res.send()
Express.js verwendet, das eine HTTP-Antwort erstellt und diese versendet.
- Ihr
try
und Ihr finally
Block führen diese Funktion folgendermaßen aus:
try {
// Get DB records etc.
return res.send('try');
} catch(e) {
// log errors
} finally {
return res.send('finally');
}
Dieser Code zeigt die Zeichenfolge try
in Ihrem Browser an. AUCH das Beispiel zeigt einen Fehler in Ihrer Konsole. Die res.send()
Funktion wird zweimal aufgerufen . Dies geschieht mit allem, was eine Funktion ist. Der Try-Catch-finally-Block wird diese Tatsache für das ungeübte Auge verschleiern, weil ich (persönlich) nur assoziierereturn
Werte nur mit Funktionsbereichen .
Imho ist Ihre beste Wette, nie return
innerhalb eines finally
Blocks zu verwenden . Dies wird Ihren Code überkomplizieren und möglicherweise Fehler maskieren.
Tatsächlich gibt es in PHPStorm eine Standard-Code-Inspektionsregel, die eine "Warnung" dafür gibt:
https://www.jetbrains.com/help/phpstorm/javascript-and-typescript-return-inside-finally-block.html
Also, wofür benutzt du finally
?
ich würde ... benutzen finally
nur Sachen aufräumen. Alles, was für den Rückgabewert einer Funktion nicht kritisch ist.
Es kann sinnvoll sein, wenn Sie darüber nachdenken, denn wenn Sie von einer Codezeile unter abhängen finally
, gehen Sie davon aus, dass es Fehler in try
oder geben könnte catch
. Die letzten beiden sind jedoch die eigentlichen Bausteine für die Fehlerbehandlung. Verwenden Sie stattdessen einfach ein return
In try
und catch
.