В чем разница между subscription.unsubscribe () и subscription.remove ()? - PullRequest
0 голосов
/ 22 ноября 2018

Я использую Angular 5 и подписался на наблюдаемое, используя метод subscribe().Я хочу знать, достаточно ли всего лишь вызова метода unsubscribe() в подписке, чтобы все очистить, или я должен также вызвать метод remove()?

фрагмент кода:

`

// somewhere in a method
this.s1 = someObservable.subscribe((value) => {
     //somecode
 });
// in ngOnDestroy
this.s1.unsubscribe(); // should I also call .remove()

`

1 Ответ

0 голосов
/ 22 ноября 2018

.remove удалить подписку из внутреннего списка, но она не отписаться.

.unsubscribe очистить все, отписаться и удалить наблюдателя из внутреннего списка,(Была ошибка (исправлена), которая не удаляла наблюдателя из списка)

.takeWhile сохранить подписку, поскольку определенная ситуация false

пример:

this.service.method()
.subscribe(res => {
  //logic
});

это никогда не отменит подписку.

this.service.method()
    takeWhile(() => this.isAlive) // <-- custom variable setted to true
    .subscribe(res => {
      //logic
    });

ngOnDestroy(){
    this.isAlive = false;
}

Автоматическая отмена подписки, когда компонент будет уничтожен.

   this.s1 = someObservable.subscribe((value) => {
        //somecode
    });

public yourMethod(){
    this.s1.unsubscribe();
}

эта подписка будет существовать и будет "живой"пока yourFunction не вызывается.

-

Лично мне нравится использовать оператор rxjs takeWhile, чтобы сохранить код в чистоте.В очень большом проекте или отдельном компоненте с несколькими подписками сбивает с толку наличие (IE) 30 variables: Subscription.Поэтому, если вы спрашиваете, когда использовать оператор takeWhile, я отвечу: (на примере одной подписки) -> Если вы уверены, что unsubscribe необходимо выполнить, когда компонент уничтожен, используйте takeWhile.Если вам нужно отписаться в определенном сценарии, где компонент все еще «жив», используйте второй пример, который я написал.

Надеюсь помочь вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...