Я обычно избегаю ставить логику в подписке.
Прелесть функционального кодирования в том, что вы можете комбинировать, архивировать, объединять и расширять свои наблюдаемые объекты.
Если вы добавляете логику в подписку, она просто теряет переносимость и ее сложнее реорганизовать на более позднем этапе.Вот типичный сценарий объединения потоковых нарезок
const stream1=observable
.pipe(tap(() => dosmg()))
const stream1WithLoggin=stream1.pipe(tap(message=>console.log(message))
const stream1WithHttp=stream1.pipe(mergeMap(message=>fetch(someurl))