【问题标题】:Difference between Observable#single() and Observable#toSingle()?Observable#single() 和 Observable#toSingle() 的区别?
【发布时间】:2017-11-29 21:25:11
【问题描述】:

我偶然发现了这些方法,从我从文档中得到的信息来看,它们的作用几乎完全相同。查看代码,他们显然做了不同的事情。从一开始,single() 返回一个 Observable(为什么?),而 toSingle() 有效地返回一个 Single

我对响应式世界的有限了解让我想知道,为什么这两种方法都存在?他们有什么不同?他们中的任何一个都应该使用另一个吗?

它们中的任何一个或两个immediately 是否将Observable 转换为Single,如果它没有发出任何项目,它会引发错误?还是他们等待事件发出?

让我感到困惑的另一件事是他们的大理石图是不同的 (toSinglesingle),但他们的文档说它们的行为应该完全相同,特别是它们的行为应该像 single() 大理石图。

这里是文档: Observable#toSingle Observable#single

【问题讨论】:

  • 您能否提供每个操作员的文档链接?

标签: java rx-java system.reactive reactive


【解决方案1】:

为什么这两种方法都存在?

single() 是原始 ReactiveX 运算符集的一部分。 toSingle() 是后来在 RxJava 中引入 Single 时添加的。

它们有什么区别?

它们返回不同的基础反应类。 single() 保持 ObservabletoSingle() 转换为 Single

他们中的任何一个都应该使用另一个吗?

取决于你想使用什么类型,以及你是否打算很快迁移到 RxJava 2.x。在 RxJava 2 中,没有 toSingle 并且(大多数)运算符现在返回更合适的类型:single(T)singleOrError()singleElement()

他们的大理石图是不同的

toSingle 的弹珠没有错误情况,Single 类型的时间图表示随时间变化的事件的约定与Observable 略有不同。

【讨论】:

    【解决方案2】:

    我相信两者是相同的,两者都会在上游完成时产生 1 个项目,如果提供多个​​项目(如文档所述),两者都会产生错误,因此使用它们的安全方式将是 可观察的.take(1).toSingle() 或者确实是 observable.take(1).single()

    【讨论】:

      猜你喜欢
      • 2017-08-03
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 2016-05-21
      • 2016-09-18
      • 1970-01-01
      相关资源
      最近更新 更多