在Flowable上的dispose()之后调用Completable操作

时间:2018-06-20 19:27:37

标签: rx-java2

我有一个建模为Completable的异步操作:

Completable onCancel = onCancel();

我有一个Flowable

Flowable<Integer> f = flowable();

我要在处置对flowable的订阅时触发onCancel操作:

f.subscribe().dispose();

我能想到的唯一方法是像这样从onCancel内部订阅doOnCancel

f.doOnCancel(() -> onCancel.blockingAwait())

这是推荐的方法吗?

1 个答案:

答案 0 :(得分:0)

在一个流内部订阅另一个流没有本质上的错误。但是,或者,您可以考虑是否可以将导致取消订阅的事件表示为Observable,然后订阅该事件。在这种情况下,您不必对取消做出任何反应,而只需直接针对此事件。当然能否做到取决于您的情况。

您的示例中最大的气味是执行blockingAwait(),这迫使异步任务同步完成-那时使用RxJava没有意义。

您只需订阅Completable

doOnCancel(() -> completable.subscribe(
        () -> System.out.println("Completed!"),
        e -> System.out.println("Completed with error: " + e)
))

甚至不推荐doOnCancel(completable::subscribe)-不推荐,因为那样您会丢失所有有关完成和错误的信息。