2016-09-06 8 views
1

通常、私はそれが1回だけ実行され、観察可能なを作成するために RXサブ観測可能 - 実行は一度だけ

Observable observable = someObservable.replay().refCount(); 

を使用しています。私は、次のような observable複数回に加入する場合、これが正常に動作します:

observable.observeOn(Schedulers.io()) 
    .subscribeOn(AndroidSchedulers.mainThread()) 
    .subscribe(...); 

observable.observeOn(Schedulers.io()) 
    .subscribeOn(AndroidSchedulers.mainThread()) 
    .subscribe(...); 

observable一度だけ実行される - 完璧な、私はそれをしたいだけのよう。今私が次のようにしている場合:

Observable obs1 = observable.map(...); // call some operators 
Observable obs2 = observable.map(...); // call some operators 

obs1.observeOn(Schedulers.io()) 
    .subscribeOn(AndroidSchedulers.mainThread()) 
    .subscribe(...); 

obs2.observeOn(Schedulers.io()) 
    .subscribeOn(AndroidSchedulers.mainThread()) 
    .subscribe(...); 

次に、observableが2回実行されます。これが起こらないことをどうすれば確認できますか?

答えて

2

あなたが望むのは、.take(1)演算子を追加することです。これにより、オブザーバブルから何かが読み込まれると、onCompleteが呼び出されます。

+0

私は全体のシーケンスを再生したい...私は何かを失うことを望んでいない。私の観測項目から放出されるすべてのアイテムは、任意の加入者または任意のチェーンに放出する必要があります。観測可能なのは – prom85

+1

で使用されています.cache()演算子を使用できます。このようにして、最初の実行は観測可能なものを作成し、他の加入者はまったく同じキャッシュされた放出を得る。 .cacheはあなたのための状態を維持するものと考えてください。 – FriendlyMikhail

+0

これは動作しています。私はまだ混乱しています、なぜ 'refCount'が動作していないのですか...' refCount'のように思えるのは、結果のobservableを直接購読している場合だけです(私はそれについてはまだ読んでいません)... 'autoConnect'は代わりに動作します... – prom85

関連する問題