2017-01-04 38 views
1

Completableが正常に完了したときにflatMapCompletableが指定されたアクションを呼び出すと予想していました。しかし、私は思った通りに動作しません。ここに簡単な例があります:flatMapCompletableが指定されたアクションを呼び出さない

PublishProcessor<String> processor = PublishProcessor.create(); 

    processor.flatMapCompletable(s2 -> { 
     System.out.println("s2 " + s2); 
     return Completable.complete(); 
    }).subscribe(() -> { 
     System.out.println("done"); // it does not come here 
    }); 

この現象は予期しないものですか?もしそうなら、Completableタスクが完了したかどうかを確認するには? Completable.complete().doFinally()

答えて

3

アクションオンコンプリートを取得するには、processor.onComplete();に電話する必要があります。これは、着信イベントをリッスンしている間は、依然としてサブジェクトにサブスクライブしているためです。

Flowableは通常

Flowable.just(1).flatMapCompletable(s2 -> { 
     System.out.println("s2 " + s2); 
     return Completable.complete(); 
    }).subscribe(() -> { 
     System.out.println("done"); // it does come here 
    }); 
+0

ありがとうございます。私は理解した。もし私がPublishProcessorを使いたいのであれば、おそらくこのようになるだろうか? 'processor.flatMapCompletable(S1 - > { のSystem.out.println( "S1" + S1); リターンCompletable.complete() .doOnComplete(() - > processor.onComplete());} ) .subscribe(() - > System.out.println( "done") ); ' – tomoima525

2

を完了したアレクサンダーが指摘したように、あなたは何を得ることはありません理由はPublishProcessor完了したことがないです。

JavaDocflatmapCompletable注意事項は次のとおりです。

上流Observableの各要素をCompletableSourcesにマップし、それらにサブスクライブし、上流およびすべてのCompletableSourcesが完了するまで待ちます。

したがって、上流のObservableとすべてのCompletableSourceがイベントを受け取るために完了していることを確認する必要があります。

ありがとうございました。

関連する問題