Pull to refresh

Comments 7

По моему опыту и тикету github.com/angular/angular/issues/30497 метод 5 работать не будет в продакшн-билде — ngOnDestroy, объявленный в дектораторе, не вызывается при AoT компиляции, если исходный компонент не содержит данный метод.

Как упомянуто в статье (может стоит выделить более жирным начертанием?) методы take/takeWhile приводят к утечкам памяти, если необходимые условия для отмены подписки не соблюдены. Простейший пример — использование filter до, либо switchMap/mergeMap после.

Если нужно корректно отписаться и при этом избежать утечек памяти — то async, unsubscribe и takeUntil (при условии, что тот стоит после всех остальных условий прямо перед подпиской).
В популярных библиотеках, реализующий такой декоратор, кидают исключение, если метод не был объявлен.
Вообще в примерах кода из оригинальной статьи довольно много ошибок, которые добротно скопированы и в перевод. Может это какой-то вид троллинга?

Есть-ли способ обнаруживать незакрытые подписки после разрушения компонента, годный для использования в юнит тестах?

Ошибка в 4 листинге в пункте 1. subscription -undefined, а мы пытаемся вызвать метод add. Скорей всего сначала надо сделать:


this.subscription = subcription1$;
this.subscription.add(subscription2$);
Почему subscription — undefined? Он же в свойствах класса объявлен на 5й строке

В свойствах класса только указан тип, но инициализации нет, для того что бы инициализировать нужно написать = и присвоить значение, либо проинициализировать в конструкторе. Я про эту строчку:


subscription: Subscription;
Only those users with full accounts are able to leave comments. Log in, please.