加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular&RX:改进了订阅收集

发布时间:2020-12-17 17:22:40 所属栏目:安全 来源:网络整理
导读:更新 找到解决方案后,我根据接受的答案写了一个小帮手ng2-rx-collector,使其更容易使用.希望它可以帮助一个人一次又一次地面对同样的问题. 原始问题 假设我们在hot observables上有一个包含两个订阅的组件.我们在ngOnInit中订阅它们并在ngOnDestroy中取消订
更新

找到解决方案后,我根据接受的答案写了一个小帮手ng2-rx-collector,使其更容易使用.希望它可以帮助一个人一次又一次地面对同样的问题.

原始问题

假设我们在hot observables上有一个包含两个订阅的组件.我们在ngOnInit中订阅它们并在ngOnDestroy中取消订阅以避免内存泄漏/意外行为:

public ngOnInit() {
  this.s1 = o1.subscribe(console.debug.bind(console));
  this.s2 = o2.subscribe(console.debug.bind(console));
}

public ngOnDestroy() {
  this.s1.unsubscribe();
  this.s2.unsubscribe();
}

我喜欢Rx,但每次我需要遵循这个时,我真的想要自杀:

>为每个订阅创建一个私人订阅属性
>将此属性分配给订阅(这看起来很丑陋,因为真正的逻辑转到了右侧)
>取消订阅每个订阅的销毁

有没有办法改善这个?

例如.在RxSwift中他们有一个DisposeBag来改进这个过程,翻译成打字稿会是:

private let bag = DisposeBag();

...

o1.subscribe(...).addDisposableTo(bag);

然后只破坏它一次.问题是我找不到任何类似的订阅功能.

任何想法/提示都会受到热烈欢迎.

解决方法

你可以这样做:

private teardown$= new Subject<void>();

public ngOnInit() {
    o1.takeUntil(this.teardown$).subscribe(console.debug.bind(console));
    o2.takeUntil(this.teardown$).subscribe(console.debug.bind(console));
}

public ngOnDestroy() {
   this.teardown$.next();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读