flatMapCompletable不会调用给定的Action

时间:2017-01-04 19:16:32

标签: rx-java rx-java2

我期待flatMapCompletable在Completable正常完成时调用给定的Action。但是,它没有像我想象的那样起作用。这是一个简单的例子:

    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()

2 个答案:

答案 0 :(得分:5)

您需要致电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
    });

答案 1 :(得分:3)

正如亚历山大指出的那样,PublishProcessor永远不会完成任何事情的原因。

JavaDoc flatmapCompletable注释如下。

  

将上游Observable的每个元素映射到CompletableSources,订阅它们并等待上游和所有CompletableSources完成。

因此,您必须确保上游Observable和所有CompletableSource完成以接收任何事件。

感谢。