Finally Blocks

Nov 30, 2021 4:47 AM

What do you expect the below code block to print out?

try {
  console.log('try run');
  throw new Error('try error');
} catch (error) {
  console.log('catch run');
  throw new Error('catch error');
} finally {
  console.log('finally run');
console.log('after finally run');

I expected:

try run
catch run
JS error ('catch error')

But it actually results in:

try run
catch run
finally run
JS error ('catch error')

It was surprising to me at first that finally has this behavior since I always assumed finally blocks were syntactic sugar. Turns out they actually serve a purpose!