如何在角度中完全摧毁RXjS对象



我有 angular(4) 应用程序,我正在使用EventEmitter来处理某些事件。

因此,每个eventEmitter大约有~50个订阅。我想知道快速摧毁所有这些的方法。

1)我知道我们何时将每个可观察对象/主题对象推送到数组的方式,但这真的很肮脏。我们的应用程序中有很多丑陋的代码,当我看到它时,我的眼睛正在流血。

2)我知道另一种方法,当我们可以使用.takeUntil.takeWhile但这不是解决方案!(如果我错了,请纠正我)因为订阅者不会响应事件,但观察者会有订阅者。(如果你还记得的话,每个观察者大约是~50)。订阅者将保留在内存中。我不确定,但似乎 GC 无法摧毁这些对象。而且真的很糟糕!

所以,据我了解 - 我们应该使用.unsubscribe.complete来杀死有订阅者的观察者。 而且....我们该怎么做?你现在除了阵列之外还有美丽的方式吗?

附言我也对收集要销毁的物体的 TS 装饰器有想法,但我没有得到成功的结果......

在 rxjs5 中,每次订阅可观察对象时,该函数都会返回订阅的一个实例,稍后可以使用该实例取消订阅订阅范围内的可观察对象。举个例子:

$sub: ISubscription;
obs$: Observable<any> = ... //some observable instance
method(){
$sub = obs$.subscribe(...);//subscribe to the stream
}
dispose(){
$sub.unsubscribe(); // now there is one less element listening to the stream
}

当大量订阅存储在将在奇异方法中处置的奇异变量中时,另一种方法是将所有订阅存储在数组中,然后在循环中调用 .unsubscribe。

通常,在组件中,您可以看到methodngOnInit或组件constructor并且disposengOnDestroy

PS:如果您指的是@angular/core中的EventEmitter,那么老实说,您订阅了如此多的元素EventEmitter实例对我来说听起来很奇怪......

最新更新