2016-08-16 8 views
6

は以下を達成するためにいくつかの方法があります。私がしたいことは以下の通りです:RXJava(各観測可能なため連結のような、しかしonCompletedで)別の後に複数の観測を実行している

  • は、最初に観察
  • を実行する第二の観察可能
  • が第二の観察可能
  • onCompletedを観察する実行最初に観察
  • onCompletedを観察するには、第三、観察を実行します
  • 第3観察のonCompletedを確認

これはconcatで行うことができますが、最後のonCompletedを見ることができます。私が知っている

醜いソリューション

私は前者のonCompletedイベントから次のobersvableを開始した場合、私は、それを達成することができます。

質問

さえして観測任意の数でこれを達成するための他の方法はありますか?ユースケース

  • まず、I - これは本当に醜いと深いチェーンはあまり明確でそれを取得...

    編集を行くように私は、onCompletedイベントからすべて一緒にこの連鎖避けたいです私のアプリが最後に起動したときにロードしたデータを表すデータを出したい(私はディスクにデータをシリアライズする)=>理由は、私は非常に高速のアプリケーションをいつも始めることです。

  • 最新のデータを空の状態でロードするためのデータロードの第2の実行
  • その後、最新のデータの欠けている深いデータをロードするために3回目のデータ読み込みが必要です

私は常にデータを更新したいと思います。完成しました

+0

複数の「oncompleted」イベントを監視することで、正確に何をしようとしていますか?ここでは、ユースケースの例を教えてください。 –

+0

私の使用例で私の質問を編集しました... – prom85

+1

ねえ、解決方法はありますか? –

答えて

0

私はconcatMapが答えかもしれないと思います。私が助けたコードの下に願っています

Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 
    .concatMap(integer -> Observable.just(integer) 
      .observeOn(Schedulers.computation()) 
      .concatMap(i -> { 
       try { 
        Thread.sleep(new Random().nextInt(1000)); 
        return Observable.just(2 * i); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
        return Observable.error(e); 
       } 
      })) 
    .subscribe(System.out::println, 
      Throwable::printStackTrace, 
      () -> System.out.println("onCompleted")); 
9

:あなたが観測を連結し、あなたがコードしているので、一度登録することができますconcatMapで のようなものである可能性があります。

Observable<MyData> observable1 = ...; 
Observable<MyData> observable2 = ...; 
Observable<MyData> observable3 = ...; 

Observable 
     .concat(observable1.doOnCompleted(this::onCompleteObservable1), 
       observable2.doOnCompleted(this::onCompleteObservable2), 
       observable3.doOnCompleted(this::onCompleteObservable3)) 
     .subscribeOn(Schedulers.newThread()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(...); 

ここにサンプルメソッドがあります。

void onCompleteObservable1() { 
    //do some work 
} 

void onCompleteObservable2() { 
    //do some work 
} 

void onCompleteObservable3() { 
    //do some work 
} 
関連する問題