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完全ではありません。

flatmapCompletable以下のメモのJavaDoc 。

アップストリームの Observable の各要素を CompletableSources にマップし、サブスクライブして、アップストリームとすべての CompletableSources が完了するまで待機します。

したがって、アップストリームの Observable とすべての CompletableSources がイベントを受け取るために完了していることを確認する必要があります。

ありがとう。

于 2017-01-05T02:16:30.947 に答える