Voy a dar una respuesta ligeramente diferente aquí: Sí, tanto el bloque tryy finallyse ejecutan, y finallytiene prioridad sobre el valor de "retorno" real para una función. Sin embargo, estos valores de retorno no siempre se usan en su código.
Este es el por qué:
- El siguiente ejemplo utilizará
res.send()de Express.js, que crea una respuesta HTTP y la envía.
- Tu
tryy el finallybloque ejecutarán esta función así:
try {
// Get DB records etc.
return res.send('try');
} catch(e) {
// log errors
} finally {
return res.send('finally');
}
Este código mostrará la cadena tryen su navegador. TAMBIÉN, el ejemplo mostrará un error en su consola. La res.send()función se llama dos veces . Esto sucederá con todo lo que sea una función. El bloque try-catch-finalmente ocultará este hecho al ojo inexperto, porque (personalmente) solo asocio returnvalores con ámbitos de función.
En mi humilde opinión, su mejor opción es no usar nunca returndentro de un finallybloque . Complicará demasiado su código y potencialmente enmascarará errores.
De hecho, hay una regla de inspección de código predeterminada configurada en PHPStorm que da una "Advertencia" para esto:
https://www.jetbrains.com/help/phpstorm/javascript-and-typescript-return-inside-finally-block.html
Entonces, ¿para qué usas finally?
Solo lo usaría finallypara limpiar cosas. Todo lo que no sea crítico para el valor de retorno de una función.
Puede tener sentido si lo piensa, porque cuando depende de una línea de código debajo finally, está asumiendo que podría haber errores en tryo catch. Pero esos dos últimos son los bloques de construcción reales del manejo de errores. Solo usa returnin tryy en su catchlugar.