は、次のシナリオを検討RxJs:無限ループを防止
observerX => observableA <= observerY => observableB <= observerZ
- 2つの観測(とB)と3人のオブザーバー(X、Yがあります、、Z)。
- これらのオブザーバとオブザーバブルのそれぞれは、別々の(角度の)サービス内にあります。
- オブザーバーYは、彼らが完了しない観察可能とアプリケーションの期間にわたって「生きている」のまま観察可能B、すなわち両方を観察します。観測イベントをトリガ
- は、オブザーバーYがイベントをトリガするために観測Bを引き起こす観測Bのサービスに関数を呼び出します。同様に、観測Bは、順番にイベントをトリガする観測を引き起こす観測のサービスに関数を呼び出すイベント、オブザーバYをトリガします。
例:あなたが見ることができるように、すべてのオブザーバーYがやろうとしているオブザーバーY ...
svcA.obsA.subscribe(()=> {
svcB.doSomething()
});
svcB.obsB.subscribe(()=> {
svcA.doSomething()
});
は同期サービスにとサービスBを維持することです。
問題: 上記の設定は、無限の実行ループを引き起こします。この問題を回避するために私の頭に浮かんだ1つのアイデアは、各サブスクリプションにフラグを設定することです。そのフラグが設定されると、他のサブスクリプションは次のイベントを無視します。次のイベントは、必ずしもオブザーバーY doSomething()
を呼び出すに対応するものではないかもしれないが、オブザーバーX又はZにdoSomething()
を呼び出すことによるものであり得るので、それは、しかし、適切な解決策ではありません。
このユースケースには洗練されたソリューションがありますか?私はここで建築上の問題がありますか?問題の説明が明確でない場合は教えてください。
JSFiddles:
問題をより具体的に指定できますか?私。 Observable AとBのデータはどうしていますか?私たちはどのような種類のデータを取っていますか、あなたは2つのObservablesを同期させることを強要していますか?あなたはjorkJoinを使うことができますか? – Siegmeyer
@Siegmeyerご返信ありがとうございます。私は仕事に戻ってから数日後に、あなたに詳細を尋ねる必要があります。 –
@Siegmeyer JSFiddleのサンプルを追加しました。問題の明確化に役立ちます。オブザーバブルはデータを返さず、オブザーバにタスクが完了したことを通知するだけです。サービスAとサービスBとの間のこのセットアップの理由は、それらをモジュール化してお互いに完全に切り離すためです。 ObserverY(アプリケーションロジック)の責任は、サービスの1つがそのタスクを実行するために突き刺されたときに、他のサービスがその役割を果たしていることを確認することです。私はこれが役立つことを願っています –