5

当 Completable 正常完成时,我期待 flatMapCompletable 将调用给定的 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()?

4

2 回答 2

9

您需要调用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
    });
于 2017-01-04T20:14:30.093 回答
4

正如亚历山大所指出的,你一无所获的原因PublishProcessor永远是不完整的。

JavaDocflatmapCompletable注释如下。

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

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

谢谢。

于 2017-01-05T02:16:30.947 回答