我无意中发现了这些方法,从我从文档中得到的信息来看,它们所做的几乎是完全一样的事情。看代码,他们显然会做不同的事情。首先,single()返回一个Observable (为什么?)而toSingle()实际上返回一个Single。
我对反应性世界的认识有限,我想知道,为什么这两种方法都存在?他们有什么不同?他们中的任何一个应该使用另一个吗?
它们中的任何一个或两个immediately是否将Observable转换为Single,如果没有发出任何项,则会引发错误?或者他们是在等待事件的发生?
另一件让我感到困惑的是,他们的大理石图是不同的(toSingle和单人),但是他们的医生说他们的行为应该完全一样,特别是他们应该表现得像single()大理石图。
以下是文档:Observable#toSingle Observable#single
发布于 2017-11-30 09:02:37
为什么这两种方法都存在?
single()是最初的ReactiveX操作符集的一部分。toSingle()是在Single引入RxJava之后添加的。
他们有什么不同?
它们返回一个不同的基类反应性类。single()保持Observable,toSingle()转换为Single。
他们中的任何一个应该使用另一个吗?
这取决于您想使用哪种类型,以及您是否计划很快迁移到RxJava 2.x。在RxJava 2中,没有toSingle,(大多数)操作符现在返回一个更合适的类型:single(T)、singleOrError()或singleElement()。
他们的大理石图是不同的
toSingle的大理石没有错误大小写,而Single类型的时间图在表示事件的时间上与Observable略有不同。
发布于 2017-11-30 08:29:13
我相信两者是相同的,都将在上游完成时产生一个项目,如果提供了多个项目(如文档所述),两者都会产生错误,所以使用它们的安全方法是observable.take(1).toSingle(),或者实际上是observable.take(1).single()。
https://stackoverflow.com/questions/47562084
复制相似问题