2017-06-17 9 views
-1

私はangular(4)アプリケーションを使用しましたが、いくつかのイベントではEventEmitterを使用しています。RXjSオブジェクトを完全に破壊する方法

したがって、それぞれeventEmitterには約50件のサブスクリプションがあります。そして私はそれらのすべてを素早く破壊する方法を知りたい。

1)Observable/Subjectオブジェクトを配列にプッシュする方法はわかっていますが、実際は汚い方法です。私たちのアプリケーションにはたくさんの醜いコードがあり、私はそれを見ると私の目が血を注いでいます。

2).takeUntilまたは.takeWhileを使用することができますが、それは解決策ではありません。 (私が間違っていると私を訂正してください)加入者はイベントに応答しませんが、Observerには加入者がいるためです。 (もしあなたが覚えているのであれば、観察者ごとに約50です)。そして、加入者は記憶に残るでしょう。私は分かりませんが、GCがそれらのオブジェクトを破壊することはできないようです。そしてそれは本当に悪いです!

私が理解しているように、サブスクリプションを持つキルオブザーバーには、.unsubscribeまたは.completeを使用する必要があります。そして....私たちはそれをどうやってできるのですか?あなたは今、配列以外の美しい方法ですか?

P.S.私はまた、破壊のためのオブジェクトを収集するTSデコレータに関する考えを持っていましたが、私は成功の結果を得ていません...

答えて

0

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を呼び出すことですループ。

は、通常のコンポーネントで、あなたはmethodはどちらかであるngOnInitまたはコンポーネントconstructordisposengOnDestroyであることがわかります。

PS:あなたは@angular/coreからEventEmitterを参照してください場合は、正直に言うとEventEmitterインスタンスに加入要素のような大きな金額を持っていることを私には、その音が奇妙な...

+0

[OK]を、私はおよそ持っています〜10kサブスクリプション。どうすれば退会できますか?一見すると約10-15秒かかります。 –

関連する問題