RxJava(及其衍生品,如 RxGroovy 和 RxScala)开发了一种名为“Single”的 可观察对象 变体。
Single 类似于可观察对象,但它不会发出一系列值(从根本没有到无限多个),而始终只发出一个值或一个错误通知。
因此,您不是使用三种方法来订阅 Single 以响应可观察对象的通知(onNext, onError,以及onCompleted),而是只使用两种方法来订阅
Single 仅调用其中一种方法,并且只调用一次。在调用任何方法后,Single 将终止,对它的订阅也会结束。
与可观察对象一样,Single 可以通过各种操作符进行操作。某些操作符还允许在可观察对象世界和 Single 世界之间建立接口,以便您可以混合使用这两种变体
操作符 | 返回值 | 描述 |
---|---|---|
compose | 单例 | 允许您创建自定义操作符 |
concat和concatWith | 可观察对象 | 将多个 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 |
merge和mergeWith | 可观察对象 | 将多个 Single 发出的项目合并为可观察对象的发出项目(按任意顺序) |
observeOn | 单例 | 指示 Single 在特定 调度器 上调用订阅者方法 |
onErrorReturn | 单例 | 将发出错误通知的 Single 转换为发出指定项目的 Single |
subscribeOn | 单例 | 指示 Single 在特定 调度器 上操作 |
timeout | 单例 | 返回一个 Single,如果源 Single 在指定的时间段内没有发出值,它将发出错误通知 |
toSingle | 单例 | 将发出单个项目的可观察对象转换为发出该项目的 Single |
toObservable | 可观察对象 | 将 Single 转换为一个可观察对象,该可观察对象会发出 Single 发出的项目,然后完成 |
zip和zipWith | 单例 | 返回一个 Single,它会发出一个项目,该项目是对两个或多个其他 Single 发出的项目应用函数的结果 |
本页面的以下部分将提供一些以图解形式解释这些操作符的弹珠图。此图解释了弹珠图中如何表示 Single
此操作符还有一个实例版本
此操作符还有一个版本允许您在特定 调度器 上执行延迟
还有一个以 调度器 作为参数的变体:
merge 的一个版本接收一个发出第二个 Single 的 Single,并将其转换为发出该第二个 Single 发出的项目的 Single
另一个版本接收两个或多个 Single,并将它们合并为一个可观察对象,该可观察对象会发出源 Single 发出的项目(按任意顺序)
如果在订阅后指定的时间段内 Single 没有发出项目,则 Timeout 会导致 Single 以错误通知中止。一个版本允许您通过指定的时间单位数来设置此超时
您还可以为计时器指定特定 调度器 来操作
Timeout 操作符的一个版本允许您切换到备份 Single,而不是在超时到期时发送错误通知
它也有一个特定于 调度器 的版本