在 RxJava 中,可观察的、完整的和单一的区别是什么

有没有人能用清晰的例子来解释一下 RxJava 中可观察的、完整的和单一的三者之间的区别?

在哪种情况下,我们使用一个比其他?

38593 次浏览

Observable是通用的 ReactiveX 构建块,它是随时间发出值的事件源的构建块。(因此存在于 ReactiveX 扩展到的每种语言中)
简而言之,可观测的事件包括:
OnNext * (onCompleted | onError) ?/(* 0或更多?-0或1)

Single Completable是 RxJava 专门引入的新类型,它们代表简化的 Observable类型,具有更简洁的 API。

Single表示发出单个值或错误的 Observable

Completable表示不发出值但只发出终端事件(onErroronCompleted)的 Observable

你可以把这些不同想象成返回的方法的不同:

  • 对象集合-可观察

  • 单一物体-单一

  • 和不返回值的方法(void 方法)-可完成。

当你使用面向任务的可观察值并且期望只有一个值时,比如网络请求只执行一次并返回值(或者错误) ,网络调用只执行一次,这意味着你不希望它随着时间的推移返回额外的值。另一个例子是数据库获取数据操作。

当你有一个 Observable并且你不关心操作所产生的值,或者根本没有值的时候,Completable是合适的。 例如,更新缓存,操作可以成功或失败,但没有值。
另一个例子是一些长时间运行的 init 操作,它不返回任何东西。它可以是 UPDATE/PUT 网络调用,这只会导致成功指示。

在任何情况下,Completable 和 Single 都没有添加新的功能,但是他们引入了更健壮、更简洁的 API,这些 API 更多地说明了 API 公开的 Obable 背后的操作。

编辑:

RxJava2Maybe:

RxJava2 added a new type called Maybe, Maybe is the combination of Completable and Single.

在与上面相同的语言中,Maybe可以被看作是一个返回的方法 某种类型的 OptionalOptional是 Object 的一个包装器,它显式地告诉我们是否在 Object 中有一些值-Object或者没有(而不是 null)。
使用 Maybe,我们可以得到一些与 Single完全相同的值,也可以不返回任何值——就像 Completable一样。此外,像两者一样,我们也有错误。
当我们想要标记一个 Observable可能没有值并且只是完成时,Maybe是有价值的。
从缓存中获取一个示例,我们不一定在缓存中有一个值,因此在这种情况下,我们将完成,o.w. 我们将从缓存中获取具有该值的 onNext
这对于在使用 RxJava2的流中处理非空值也很有价值。

RxJava2Flowable:

首先,让我们定义背压。反向压力是一种处理数据生成速度快于处理速度的情况的方法。Flowable有背压支持,允许下游请求项目。你可以阅读更多关于差异 给你

  1. Flowable 显而易见可以表示有限或无限的流。 可流动支撑 背压
  2. 单个 是具有单个元素的流。
  3. 也许 是带有0或1个元素的流。
  4. 最后,完整表示一个没有元素的流,即它 只能在没有值的情况下完成,否则将失败。

我在 RXJava 部分找到了一个简明的答案 给你

单身及单身观察者

Single始终只发出一个值或抛出一个错误。 Single始终确保有一个发射。

Single 的一个用例是进行网络调用以获取响应,因为将立即获取响应。

注意这里,SingleObserver没有 onNext ()来发出数据,而是在 onSuccess(Note note)方法中接收数据。


完整和完整的观察者

可观察的 Completable不会发出任何数据,而是通知任务的状态,无论是 success还是 failure。当您希望执行某些任务而不期望任何值时,可以使用此可观察值。

用例将通过发出 PUT 请求来更新服务器上的一些数据。