Если вы хотите отловить ошибку, вам придется удалить ключевое слово async,
const observable = Observable.of(true).finally(() => {
throw new Error('what');
});
с помощью асинхронного преобразования оно превратится в асинхронную функцию и не будет перехвачено. То, что вы делаете сейчас, похоже на
try {
setTimeout(()=> {throw new Error('what');},10)
} catch (e) {
console.log('We did not capture this');
}
Бросок будет выполнен из-за цикла событий вместо основного потока.