RXJS – Angular – 取消订阅主题
如
this thread所述,在Angular 5中取消订阅Observables的“官方”解决方案通常是使用takeUntil.到现在为止还挺好.我的问题是,如果我订阅的Observable实际上是一个主题,这是否也适用?
解决方法
一旦你在任何事情上调用.subscribe()(主题也是如此),需要确保订阅被取消订阅.
处理有限的Observables: Observable.of(100) Observable.from([1,2,3,4]) 无限可观测量的例子是: Observable.fromEvent(document,'click') Observable.timer(1000) 调用/管道.first(),.take(数字)或.takeWhile(在某些时候将评估为false的条件)或takeUntil(可观察到的值发出一个值)将会将无限的可观察量变为有限的. 停止调用.subscribe(): html模板中的典型示例: <h1>Editing {{ infiniteObservable$| async }}<h1> <li *ngFor="let user of userObservable$| async as users; index as i; first as isFirst"> {{i}}/{{users.length}}. {{user}} <span *ngIf="isFirst">default</span> </li> 手动取消订阅:最后,您可以选择保留对所有订阅的引用.您不必保留指向每个订阅的变量,只需使用单个Subscription对象来跟踪所有订阅,然后立即取消订阅所有订阅. const subscriptions = new Subscription(); subscriptions.add(observable1$.subscribe()); subscriptions.add(observable2$.subscribe()); subscriptions.unsubscribe(); 快速总结,如何处理取消订阅,以下任何方法: >将无限可观测值转换为有限值,因此无需取消订阅(使用.takeUntil(this.destroyed $)并在ngOnDestroy()中执行this.destroyed $.emit()). 我个人倾向于只使用两种方法中的一种. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |