Rx java flatMapCompletable不调用给定的操作

Rx java flatMapCompletable不调用给定的操作,rx-java,rx-java2,Rx Java,Rx Java2,我希望flatMapCompletable在Completable正常完成时调用给定的操作。然而,它并不像我想的那样起作用。下面是一个简单的例子: PublishProcessor<String> processor = PublishProcessor.create(); processor.flatMapCompletable(s2 -> { System.out.println("s2 " + s2); return Co

我希望flatMapCompletable在Completable正常完成时调用给定的操作。然而,它并不像我想的那样起作用。下面是一个简单的例子:

    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
    });
PublishProcessor=PublishProcessor.create();
处理器。flatMapCompletable(s2->{
系统输出打印项次(“s2”+s2);
返回Completable.complete();
}).订阅(()->{
System.out.println(“完成”);//它不在这里
});

这是预期的行为吗?如果是,如何检查可完成的任务是否已完成
Completable.complete().doFinally()

您需要调用
processor.onComplete()以使操作完成。这是因为在subject侦听传入事件时,您仍然订阅了subject

Flowable
正常完成

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

正如Alexander所指出的,你没有得到任何东西的原因是,
PublishProcessor
从未完成

关于
flatmapCompletable
注释,如下所示

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

因此,您必须确保上游可观察到的和所有CompletableSources都已完成,才能接收任何事件


谢谢。

谢谢您的回复。我明白了。如果我想使用PublishProcessor,也许会是这样<代码>处理器.flatMapCompletable(s1->{System.out.println(“s1”+s1);返回Completable.complete().doOnComplete(()->processor.onComplete();})。订阅(()->System.out.println(“完成”)