¿Hay alguna razón para poner el código en un bloque finally en lugar de simplemente tener el código después de la instrucción try...catch ? Seguramente en ambos casos el código se ejecuta de todos modos.
try {
something();
} catch (error) {
error_handling_with(error);
}
// code here gets executed whether in finally clause or not.
finally_something();
¿Hay algún lugar donde finally sea esencial después de try...catch ? Puedo ver que tiene un uso en Promises, pero no aquí.
finally , básicamente se ejecuta incluso si tiene un retorno anticipado de try-catch o incluso si no maneja el error en try-catch . Aquí hay un ejemplo que me gusta:
function myFunction() {
try {
console.log('inside "try"');
return
} finally {
console.log('inside "finally"');
}
console.log("after try-finally");
}
myFunction()
Cuando ejecute myFunction() , imprimirá lo siguiente:
inside "try"
inside "finally"
Desde que regresó de try , no ejecutó ninguna instrucción después del bloque try-finally . Pero, Javascript ejecutó el bloque finally .
Creo que ha recibido la respuesta técnica correcta para esto. Sin embargo, si está solicitando un uso práctico, una situación es cuando desea cerrar una conexión en cualquier caso. Aquí hay un pseudocódigo para explicar:
openConnection();
try {
DoSomething();
return;
} catch (anomaly) {
handleAnomaly();
} finally {
closeConnection();
}
Vea en el caso anterior, usted cierra la conexión en todos los casos, ya sea que haya una excepción manejada, una excepción no manejada o un flujo feliz, su conexión se cerrará y eso también sin duplicación de código.
Catch/Finally son opcionales, la única regla es que siempre debe existir 1 de ellos.
Finalmente existe para que el código siempre se pueda ejecutar, sin importar si se detectó o no un error.
Yo diría que en algunos casos se agregan cuando no son necesarios, pero ayuda a la legibilidad, en otros casos podría ser solo un hábito.