Comments 8
Почему используется takeUntil, а не unsubscribe?
В исходниках ангуляра используют unsubscribe.
В том аде из вручную написанных реактивных цепочек, которые порождаются активным использованием RxJS — любая экономия на смыслах оказывается выгодной. takeUntil(this.destroy$) — это способ отписать любое количество подписок с помощью одного Subject.
Subscription композитная, можно сразу все отписать в OnDestroy()
// constructor()
const subscription = new Subscription();
// Lifetime
const subscription.add(
stream1$.subscribe(...);
);
const subscription.add(
stream2$.subscribe(...);
);
// OnDestroy()
subscription.unsubscribe(); // release all subscription
UPD: внизу @sashaqred скинул статью где все эти варианты уже описаны
Записывать подписку в переменную, что бы потом вручную вызвать .unsubscribe
руками — один из вариантов. Он норм, когда подписка всего одна.
Если подписок больше, то это уже не так удобно. Для этого это можно использовать takeUntil
, как были примеры выше в статье.
Тут больше написано про различные варианты автоматических отписок https://medium.com/ngx/why-do-you-need-unsubscribe-ee0c62b5d21f
С takeUntil еще можно провернуть вообще без хука OnDestroy в компоненте. Есть решение от Тинькофф с DestroyService, который провайдится в компоненте, инжектится как Observable и делается на этот Observable уже takeUntil. А хук OnDestroy срабатывает не в компоненте, а в сервисе. Получается меньше кода в компонентах.
Порядок операторов в RxJs