10

observableA重いネットワークからデータを要求しようとするたびに、このオブザーバブルを購読すると、ネットワークからデータを取得して発行する があるとします。

BehaviorSubject を作成して observableA に接続し、他のスレッド/オブジェクトが BehaviorSubject をサブスクライブして、最新の出力データを取得できるようにします。

これまでのところ、コードを管理できませんでした。空の BehaviorSubject を作成して observableA 内で呼び出すことはできません。これらは互いに関連していないためです。observableA にサブスクライブできず、BehaviorSubject をオブザーバーとして取得できません。どうすれば達成できますか? それとももっと良いですか?

4

3 に答える 3

4

使用できますmulticast。例えば、

Observable<String> o = ...;
ConnectableObservable<String> co = o.multicast(BehaviorSubject.<String> create());
co.connect();
co.subscribe(...);
co.subscribe(...);
co.subscribe(...);
于 2014-06-06T06:09:31.400 に答える
1

Rx 内でプロミスをラップした Javascript で同様のシナリオがあり、Observable にサブスクライブするときにネットワーク呼び出しを再度行いたくありませんでした。これが私が実装した方法です:

   subject = new Rx.AsyncSubject();
   observable = Rx.Observable.fromPromise(....).subscribe(subject);

AsyncSubject (AsyncSubject - 非同期操作の結果を表します。OnCompleted 通知の前の最後の値、またはOnError を介して受信したエラーは、サブスクライブしているすべてのオブザーバーに送信されます)。

于 2015-08-27T18:43:50.577 に答える
0

Rx.NET では、パラメーターを受け入れるPublishinitialValueオーバーロードの 1 つを使用します。基本的に、これは zsxwing で説明されているようなマルチキャストを行うためのより短い方法です。Rx.Java がこれらのオーバーロードされPublishたメソッドを提供しているかどうかはわかりません。

于 2014-08-28T14:19:26.183 に答える