Как проверить, все ли подписки отписались в Angular? - PullRequest
0 голосов
/ 08 февраля 2019

В принципе, я хочу проверить, есть ли живые подписки после вызова ngOnDestroy.Прямо сейчас код собирает все подписки в массиве свойств компонента и отменяет подписки на ngOnDestroy.Я мог бы легко забыть добавить недавно созданную подписку в этот массив.Хочу написать тест, который поможет мне устранить такую ​​ситуацию.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вместо добавления подписки в массив, вы можете использовать оператор takeUntil().

Таким образом, вы создаете Subject, который должен выдавать значение на ngOnDestroy и отменять подписку сразу на несколько подписок

 unsubscribeSignal: Subject<void> = new Subject();

 ngOnInit() {

    firstSubscription = firstObservable
    .pipe(
       takeUntil(this.unsubscribeSignal.asObservable()),
    )
    .subscribe(result => {});

    secondSubscription = secondObservable
    .pipe(
       takeUntil(this.unsubscribeSignal.asObservable()),
    )
    .subscribe(result => {});

    thirdSubscription = thirdObservable
    .pipe(
       takeUntil(this.unsubscribeSignal.asObservable()),
    )
    .subscribe(result => {});

  }

  ngOnDestroy(){
    this.unsubscribeSignal.next();
    // Don't forget to unsubscribe from subject itself
    this.unsubscribeSignal.unsubscribe();
  }
0 голосов
/ 08 февраля 2019

Вы можете сделать простой трюк, который увеличивает значение в услуге в каждой подписке и уменьшает его в каждой отписке, тогда вы проверяете , если значение 0, так что подписка не активна

mysubscription.subscribe( data => { this.myService.myValue++;})
mysubscription.unsubscribe( data => { this.myService.myValue--;})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...