если ваш наблюдаемый поток выполняет только код синхронизации, да, это точно так же, как синхронное выполнение обычного выполнения функции, но если он асинхронный, он будет выполняться асинхронно, тогда как обещание всегда будет выполняться асинхронно
Асинхронная версия вашегокод будет что-то вроде
let ob = of(1,2,3).pipe(mergeMap(num=>timer(0),_=>num);
ob.subscribe((v)=>{
console.log(v)
})
console.log("end")