Why and how finally{…} block is NOT meaningless
A definition first (from the internet):
try-catch-finally
is used to handle runtime errors and prevent them from halting the execution of a program.
The finally block triggers regardless of:
- what is implemented inside the
try-catch
block - any errors encountered inside
try-catch
block - any
return
statement written inside thetry-catch
block
Example 1
Consider this example where there’s no error:
(()=>{
try {
console.log(`Try block triggered`)
return
} catch (error) {
console.log(error)
}finally{
console.log('Finally triggered')
}
console.log(`Rest of the code outside try-catch`)
})()
// Output Try block triggered Finally triggered
Note that the “Rest of the code outside try-catch” doesn’t get logged on the console
The finally block will override the return statement written inside the try block.
(()=>{
try {
console.log(`Try block triggered`)
throw `Oops... an error occurred`
} catch (error) {
return console.log(error)
} finally{
console.log('Finally triggered')
}
console.log(`Rest of the code outside try-catch`)
})()
//Output Try block triggered Oops... an error occurred Finally triggered
Note that the “Rest of the code outside try-catch” doesn’t get logged on the console because of the return statement
From both the example, it becomes apparent that finally
block gets executed while the code written outside the try-catch-finally
block doesn’t get executed.
Example 3
Consider this example where there is no return
statement:
(()=>{
try {
console.log(`Try block triggered`)
throw `Oops... an error occurred`
} catch (error) {
console.log(error)
}finally{
console.log('Finally triggered')
}
console.log(`Rest of the code outside try-catch`)
})()
//Output Try block triggered Oops... an error occurred Finally triggered Rest of the code outside try-catch
Note that this time, “Rest of the code outside try-catch” gets printed on the console because there is no return statement in this example implementation
A good use-case for finally block can be to put important codes such as clean up code e.g. closing the file or closing the connection.
Hence, we may not necessarily need a finally{…} block in our code all the time, but it can serve an important purpose for certain similar use-cases.
***
Note of thanks ❤️
Thank you for stopping by. Hope, you find this article useful. Please follow me on medium and help me reach 1k followers 🙏🏻. That will truly encourage me to put out more content.