subscription.unsubscribe() 和 subscription.remove() 有啥区别?
Posted
技术标签:
【中文标题】subscription.unsubscribe() 和 subscription.remove() 有啥区别?【英文标题】:What is the difference between subscription.unsubscribe() and subscription.remove()?subscription.unsubscribe() 和 subscription.remove() 有什么区别? 【发布时间】:2019-04-24 23:55:30 【问题描述】:我正在使用 Angular 5 并使用 subscribe()
方法订阅了一个 observable。我想知道是否只在订阅上调用unsubscribe()
方法就足以清理所有内容,还是我也应该调用remove()
方法?
代码sn-p:
`
// somewhere in a method
this.s1 = someObservable.subscribe((value) =>
//somecode
);
// in ngOnDestroy
this.s1.unsubscribe(); // should I also call .remove()
`
【问题讨论】:
【参考方案1】:.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。如果您需要在组件仍然“活动”的特定场景下取消订阅,请使用我编写的第二个示例。
希望已经澄清了这个论点。
【讨论】:
以上是关于subscription.unsubscribe() 和 subscription.remove() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章