angular – 取消订阅订阅数组
在一个Angular应用程序中,我通过将它们全部推入一个数组,然后循环遍历它并在ngOnDestroy期间取消订阅来管理我的订阅.
private subscriptions: Subscription[] = [] this.subscriptions.push(someObservable.subscribe(foo => bar)) 我的问题是我还没有找到足够干净的方法来处理取消订阅.理想的方式很简单 ngOnDestroy () { this.subscriptions.forEach(subscription => subscription.unsubscribe()) } 但这不起作用.值得注意的是,我在注销后仍然收到Firebase权限错误(“工作”方法不会发生这种情况).有趣的是,如果我把它拉到一个单独的类中,完全相同的方法确实有效: export class Utils { public static unsubscribeAll (subObject: {subscriptions: Subscription[]}) { subObject.subscriptions.forEach(subscription => subscription.unsubscribe()) } } // ---------- back to the component ngOnDestroy () { Utils.unsubscribeAll({subscriptions: this.subscriptions}) // no Firebase errors } 但我真的不喜欢这个解决方案,主要是因为它只有在我将数组包装在一个对象中才能作为参考传递.我发现的另一种工作方法是将其写为for循环: ngOnDestroy () { /* tslint:disable */ for (let i = 0; i < this.subscriptions.length; i++) { this.subscriptions[i].unsubscribe() } /* tslint:enable */ } 但除了不必要的长度之外,它还会使TSLint抱怨,因为它认为我应该使用for-of循环(这不起作用)所以我每次都要抛出额外的注释. 目前我正在使用Utils选项作为“最佳”解决方案,但我仍然不满意.是否有一种更清洁的方式来做到这一点,我错过了?
由于没有人想将答案作为答案发布,我想我会这样做.
如果您只是使用数组将它们分组以进行大规模取消订阅,则可以通过将它们合并到现有订阅中来完成相同的操作.对于我的设置,只需将空数组更改为空订阅并更改push以添加: private subscriptions = new Subscription() this.subscriptions.add(someObservable.subscribe(foo => bar)) 然后,当您想要取消订阅所有内容时,只需取消订阅容器订阅即可处理所有内容. ngOnDestroy () { this.subscriptions.unsubscribe() } 注意:您也可以在每个订阅上使用takeUntil,但我觉得这种方法更简单,对我正在做的事情更有意义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- shell 学习四十二天----使用 touch 更新文件时间
- scala – 是否有可能在Java 1.5上运行AKKA?
- 国土档案管理信息系统【辅助说明】
- angular之页面跳转隐藏tab
- angularjs – 控制器使用ui-router嵌套状态(Ionic)执行两次
- angularjs – 需要在$stateProvider中执行resolve属性之前解
- angularjs – 当项目是用grunt构建时,Fontawesome不工作
- 角度 – 当购物车中的产品数量增加时,总价格不会更新在Ioni
- webservice的方法重载问题
- 如何在Scala Play Framework中对服务器启动执行操作?