Voy a dar una respuesta ligeramente diferente aquí: Sí, tanto el bloque try
y finally
se ejecutan, y finally
tiene 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
try
y el finally
bloque 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 try
en 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 return
valores con ámbitos de función.
En mi humilde opinión, su mejor opción es no usar nunca return
dentro de un finally
bloque . 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 finally
para 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 try
o catch
. Pero esos dos últimos son los bloques de construcción reales del manejo de errores. Solo usa return
in try
y en su catch
lugar.