Как стать автором
Обновить

Комментарии 8

«Очень легко забыть добавить в компонент destroy$, а также забыть вызвать next и complete в хуке жизненного цикла ngOnDestroy»

Не совсем понятно зачем создавать лишний объект, если метод subscribe() возвращает Unsubscribable объект с методом unsubscribe(), который делает ровно то же самое, при чем это является предпочтительным способом.
(Но ngOnDestroy все равно надо не забыть добавить вместе с вызовом unsubscribe).
Кстати можно несколько подписок в один Unsubscribable оформить вызывая метод add() subscribe1().add(subscribe2).add(subscribe3)
что бы потом все их освободить одним вызовом unsubscribe().
Удобнее использовать прослойку в виде декоратора или сервиса, которая будет делать unsubscribe по хуку ngOnDestroy. А потом просто перед каждой подпиской использовать её в takeUntil.
И не нужно каждому компоненту дублировать ngOnDestory с кодом отписки.
Единственное, надо добавлять `ngOnDestory` всегда, даже если он пустой. В `build -aot -prod` иначе удалит его использование.
Это увеличение едва заметно, но беглый осмотр снепшота кучи показал наличие там множества неудалённых экземпляров Subscriber.

А как вы определяете какое из них вызывает утечку, если у вас очень много подписок?

Я написал свои декораторы для класса и декоратор для параметра (сеттер), которые делают сами удаление.

Правда потом с какой-то версией Англуяра появился косяк: aot с оптимизацией работает совсем по другому чем без оптимизации. А именно, Ангуляр не пытается вызвать ни один хук если его не было на момент компиляции (т.е., ngOnDestroy вообще не пытается вызваться), мой Autounsubscribe был расcчитан на ngOnDestroy.

Иначе все выглядит просто прикольно:
@Autounsubscribe()
export class SomeComponent {
  @AutoSub() subs;

  // ...
  ngOnInit() {
     this.subs = obs1$.subscribe();
     this.subs = obs2$.subscribe();
  }
}

Rxjs конечно крутая штука, но автор забыл упомянуть о расположении takeUntil в подписке, если допустим после оператора map, то не будет корректной отписки при уничтожении компонента, я конечно могу ошибаться, но вроде есть такой нюанс. Я создаю обычные массивы подписок либо единичный subscription затем отписываюсь при уничтожении.

люблю такие «легкие» статьи из разряда «об очевидном». помогают очередной раз разложить все по полочкам
Зарегистрируйтесь на Хабре, чтобы оставить комментарий