Нужно отписаться Firestore / Angularfire2 подписка - PullRequest
0 голосов
/ 03 сентября 2018

Я использую Firestore вот так.

Вариант использования 1:

contacts$: Observable<ContactDetail[]>;

constructor(){    
} 

ionViewDidEnter() {
   this.contacts$ = this.contactProvider.getSpecificUserContacts(this.authenticationProvider.user.uid).valueChanges();
   this.contacts$.pipe(first()).subscribe(res => { },
      err => { },
      () => { }
   );
}

Вариант использования 2:

getAllContactCategories() {
    this.categories$ = this.categoryProvider.getAllContactCategories().valueChanges();
    this.categories$.subscribe(res => {
       this.categorySortedList = res;          
    },
      err => { }
    );
}

Но у меня никогда не было unsubscribed этого. Так что мне нужно сделать это? В противном случае это приведет к утечке памяти и разрядке аккумулятора? Я знаю, что нам не нужно unsubscribed angular HTTP сервисов, так как это происходит автоматически самой платформой. Так что насчет Firestore / Angularfire2 observables? Я никогда не видел такой картины с книгами или статьями в пожарном магазине или чем-то подобным.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Да, хорошо отписаться от подписавшегося. Вы можете попробовать это ...

  contactsSub: Subscription;

Конструктор () {
}

ionViewDidEnter () { ... }

  ionViewDidLeave{
  this.contactsSub.unsubscribe();
  }

От angularfire2 rep: https://github.com/angular/angularfire2/issues/377

0 голосов
/ 03 сентября 2018

Используя оператор first () , вы автоматически отменяете подписку сразу после первоначальной активации подписки. Но чтобы ответить на ваш конкретный вопрос.

При подписке на наблюдаемое в компоненте вы почти всегда соглашаетесь отменить подписку, когда компонент уничтожен. Есть несколько исключительных наблюдаемых, где это не обязательно. Наблюдаемые значения ActivatedRoute входят в число исключений. ActivatedRoute и его наблюдаемые изолированы от самого маршрутизатора. Маршрутизатор уничтожает маршрутизируемый компонент, когда он больше не нужен, и внедренный ActivatedRoute умирает вместе с ним.

Не стесняйтесь отписаться в любом случае. Это безвредно и никогда не бывает плохой практикой .

С https://angular.io/guide/route

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

const subscription = this.subscription$.valueChanges().subscribe(...);

А затем вызвать unsubscribe для вновь созданной переменной.

subscription.unsubscribe();
...