Я очень разочарован, что люди даже не упоминают о async
трубе.
Это очень мощный инструмент, позволяющий вам перестать беспокоиться о подписках и использовать стратегию обнаружения push.
Чтобы использовать его, просто удалите подписки из вашего TS и присвойте значения вашим переменным, которые будут напечатаны как наблюдаемые.
Достаточно взглянуть на сокращение кода и простоту (не знаю, слово ли это, но все равно)
export class MyComponent {
firstObservable$: Observable<number> = timer(0, 1000);
secondObservable$: Observable<number> = timer(0, 1000);
combination$ = combineLatest(this.firstObservable$, this.secondObservable$)
.pipe(tap(() => console.log()));
}
В вашем HTML
<ng-container *ngIf="combination$ | async">
Observables are being observed.
</ng-container>
(хотя он не подходит для вашего примера вопроса, вы уже можете видеть, как он чище и проще)
И что самое приятное, вам больше не нужно беспокоиться об утечках памяти. Angular заботится обо всех подписках, оставляя вас заботиться только о вашем коде (что и должно делать хорошая среда).