单例

RxJava(及其衍生品,如 RxGroovy 和 RxScala)开发了一种名为“Single”的 可观察对象 变体。

Single 类似于可观察对象,但它不会发出一系列值(从根本没有到无限多个),而始终只发出一个值或一个错误通知。

因此,您不是使用三种方法来订阅 Single 以响应可观察对象的通知(onNext, onError,以及onCompleted),而是只使用两种方法来订阅

onSuccess
Single 将此方法传递给 Single 发出的唯一项目
onError
Single 将此方法传递给导致 Single 无法发出项目的 Throwable

Single 仅调用其中一种方法,并且只调用一次。在调用任何方法后,Single 将终止,对它的订阅也会结束。

通过 Single 操作符进行组合

与可观察对象一样,Single 可以通过各种操作符进行操作。某些操作符还允许在可观察对象世界和 Single 世界之间建立接口,以便您可以混合使用这两种变体

操作符返回值描述
compose单例允许您创建自定义操作符
concatconcatWith可观察对象将多个 Single 发出的项目连接起来作为可观察对象的发出项目
create单例通过显式调用订阅者方法从头开始创建 Single
delay单例将 Single 中项目的发射时间推移到未来
doOnError单例返回一个 Single,它还会在调用 onError 时调用您指定的方法
doOnSuccess单例返回一个 Single,它还会在调用 onSuccess 时调用您指定的方法
error单例返回一个 Single,它会立即向订阅者发出错误通知
flatMap单例返回一个 Single,它是对 Single 发出的项目应用函数的结果
flatMapObservable可观察对象返回一个可观察对象,它是对 Single 发出的项目应用函数的结果
from单例将 Future 转换为 Single
just单例返回一个 Single,它会发出一个指定的项目
map单例返回一个 Single,它会发出对源 Single 发出的项目应用函数的结果
merge单例将发出第二个 Single 的 Single 转换为发出第二个 Single 发出的项目的 Single
mergemergeWith可观察对象将多个 Single 发出的项目合并为可观察对象的发出项目(按任意顺序)
observeOn单例指示 Single 在特定 调度器 上调用订阅者方法
onErrorReturn单例将发出错误通知的 Single 转换为发出指定项目的 Single
subscribeOn单例指示 Single 在特定 调度器 上操作
timeout单例返回一个 Single,如果源 Single 在指定的时间段内没有发出值,它将发出错误通知
toSingle单例将发出单个项目的可观察对象转换为发出该项目的 Single
toObservable可观察对象将 Single 转换为一个可观察对象,该可观察对象会发出 Single 发出的项目,然后完成
zipzipWith单例返回一个 Single,它会发出一个项目,该项目是对两个或多个其他 Single 发出的项目应用函数的结果

本页面的以下部分将提供一些以图解形式解释这些操作符的弹珠图。此图解释了弹珠图中如何表示 Single

compose

concat 和 concatWith

此操作符还有一个实例版本

create

delay

此操作符还有一个版本允许您在特定 调度器 上执行延迟

doOnError

doOnSuccess

error

flatMap

flatMapObservable

from

还有一个以 调度器 作为参数的变体:

just

map

merge 和 mergeWith

merge 的一个版本接收一个发出第二个 Single 的 Single,并将其转换为发出该第二个 Single 发出的项目的 Single

另一个版本接收两个或多个 Single,并将它们合并为一个可观察对象,该可观察对象会发出源 Single 发出的项目(按任意顺序)

observeOn

onErrorReturn

subscribeOn

timeout

如果在订阅后指定的时间段内 Single 没有发出项目,则 Timeout 会导致 Single 以错误通知中止。一个版本允许您通过指定的时间单位数来设置此超时

您还可以为计时器指定特定 调度器 来操作

Timeout 操作符的一个版本允许您切换到备份 Single,而不是在超时到期时发送错误通知

它也有一个特定于 调度器 的版本

toObservable

zip 和 zipWith