2017-01-04 50 views
1

我期待flatMapCompletable將在Completable正常完成時調用給定的Action。但是,它並不像我想象的那樣工作。這裏有一個簡單的例子: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();才能獲得Action 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永遠不會完成。

JavaDoc of flatmapCompletable筆記如下。

將上游Observable的每個元素映射到CompletableSources,訂閱它們並等待上游和所有CompletableSources完成。

因此您必須確保上游Observable和所有CompletableSources完成接收任何事件。

謝謝。

相關問題