Нет, вам не нужно уничтожать подписку, которая запускается только один раз, поскольку наблюдаемое завершится само собой.Это то же самое, если вы используете take(1)
.
Вот документ RxJS о first и take .
Вы должны использовать ихкак это:
myOvservable.pipe(first()).subscribe(value => { /* do something */ });
myOvservable.pipe(take(1)).subscribe(value => { /* do something */ });
Если у вас есть несколько подписок, чтобы отказаться от подписки, может быть целесообразно использовать трюк takeUntil
.Вы создаете тему, в которой вы вводите фиктивное значение, когда хотите, чтобы ваши наблюдаемые были завершены:
unsubscribe = new Subject<void>();
myObs1.pipe(takeUntil(this.unsubscribe)).subscribe(value => { /* do something */ });
myObs2.pipe(takeUntil(this.unsubscribe)).subscribe(value => { /* do something */ });
// trigger the unsubscription
this.unsubscribe.next();
Примечание: takeUntil
должен быть последним оператором в последовательности каналов, чтобы избежать утечек( см. Эту статью ).
Вы также можете использовать класс Subscription
для управления своими подписками:
subscriptions = new Subscription();
this.subscriptions.add(myObs1.subscribe(value => { /* do something */ }));
this.subscriptions.add(myObs2.subscribe(value => { /* do something */ }));
// unsubscribe
this.subscriptions.unsubscribe();