我正在使用通过电子运行的Angular2应用程序。 目前,我正在寻求提高应用程序的性能并减少内存泄漏。我了解您需要在销毁应用程序时销毁订户,以防止他们关注新的价值。但是您是否需要销毁只能运行一次的订阅?
ObservableVar.subscribe().first((ans) => { // Wanting to use only one ans
dostuff(ans);
}
答案 0 :(得分:3)
不,您不需要销毁仅运行一次的订阅,因为可观察的内容将自行完成。如果使用take(1)
,这是相同的。
您必须像这样使用它们:
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
应该是管道序列中的最后一个运算符,以避免泄漏(see this article)。
您还可以使用Subscription
类来管理您的订阅:
subscriptions = new Subscription();
this.subscriptions.add(myObs1.subscribe(value => { /* do something */ }));
this.subscriptions.add(myObs2.subscribe(value => { /* do something */ }));
// unsubscribe
this.subscriptions.unsubscribe();