我期待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()
?
答案 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完成以接收任何事件。
感谢。