2017-12-12 18 views
0

私はこのような単純な使用法を理解することはできません。 2つの観測、AとB別の観測後に発光が始まり、その最初のアイテムが放出されます

Aは、Bは、それが最初の項目だ発し、Bはアイテムを放出し続けることができた後ので、私はこれを必要としなくなっA.

に影響を与えないはずである、項目を発光を開始考える

発光を開始するためにBによって放出される最初の値が必要です。

私はskipUntilとstartWithの両方を使用しないようにしました。

答えて

3

私はflatMapはあなたがやりたいことを助けることができると思う:

Observable<Integer> createA(Observable<Integer> B) { 
    return B.take(1).flatMap(b -> { 
     /* replace with your Observable A implementation here */ 
     BehaviorSubject<Integer> subjectA = BehaviorSubject.create(); 
     return subjectA; 
    }); 
} 

この方法は、それが観察Bから放出された最初の値で初期化された後にのみ発光始まる、観察可能Aを返します。

+0

これはうまくいく、btw Bの最初の放出の結果に依存する2つ以上の観測値を持っていたらどうしますか?コードを複製し、AをC、D、E ...に置き換えます。 – Linxy

+0

@Linxyはい、コードを複製できます。私はObservableから来た初期化データに依存する多くのメソッドが必要な同様の状況を抱えていました。初期化Observable(本質的に 'Btake(1)'を返す)を返すメソッドgetInit()を作成し、次に他の依存メソッドは基本的に 'return getInit()。flatMap(...)'です。だから、同じパターンで、彼らは単にinitをObservableにするのではなく、Observableを渡すのではなく、Observableの使い方の詳細に依存しています。 –

関連する問題