为什么RxJava中没有`single#doOnTerminate`方法?

时间:2017-05-19 15:47:55

标签: rx-java

RxJava的Observable同时使用doOnTerminatedoAfterTerminate方法。

区别在于doOnTerminateonCompletedonError之前被称为,而doAfterTerminate之后被称为。这两种方法似乎都很有用。

Single但是只有doAfterTerminate

为什么Single没有doOnTerminate方法?

3 个答案:

答案 0 :(得分:3)

只是让大家知道RxJava 2.2.7中已经为doOnTerminateSingle添加了Maybe

请参阅文档:http://reactivex.io/RxJava/javadoc/io/reactivex/Single.html#doOnTerminate-io.reactivex.functions.Action-

答案 1 :(得分:2)

单个有2个终止条件

  • 发出了单个项目
  • 发生错误

在这两种情况下,终止都隐含在操作中。鉴于它只有两种方法,额外的运算符可能不会被视为对用户自己实现的努力有用。

也许你可以给RxJava团队写一封电子邮件并提出一个包含的案例?

答案 2 :(得分:2)

如果您确实需要onComplete 行为之前的,则可以使用Single#toObservable进行转换。

但是,我是如何理解的:对于一个Observable,术语在终止之前意味着在发出所有项目之后,但在onComplete 之前。然而,对于Single,没有这样的时刻 - 因为发出一个项目并完成是相同的操作。

如果有一个doOnTerminate运算符,它或者意味着不同的东西(在发出单个项目之前运行),或者与单一项目的理解相矛盾(发出项目并完成是一个动作,那么为什么呢?在两者之间运行的东西) - 两者都有点糟糕的设计。

出于好奇:您的原始案例是什么,您无法在doAfterTerminate或启动单身之前拨打电话?