【发布时间】:2017-06-14 04:59:22
【问题描述】:
假设我有一个名为s_0 的Single,它可以从T 类型发出一个元素t_0,或者失败(在某些语言中是Single<T>)。那就是:
s_0: -- t_0 // Success
OR
s_0: -- X // Failure
T 类型的实例有一个next() 方法,该方法也从T 类型返回一个可选的Single(Kotlin 中的Single<T>?)。这种行为导致Single 实例链能够发出T 实例链,其中每个s_i 可以发出一个元素t_i 能够返回下一个s_i+1,这将发出一个元素t_i+1 以此类推,直到最后一个元素 t_n-1 不返回单曲或任何单曲失败:
s_0: -- t_0
↓
s_1: -- t_1
↓
s_2: -- t_2
...
↓
s_n-1: -- t_n-1
↓
null
OR
s_0: -- t_0
↓
s_1: -- t_1
↓
s_2: -- t_2
...
↓
s_i: -- X
我正在寻找一种优雅的方法来从T 类型中获取Observable o 能够发射由s_0 开始的链中的所有元素,当有链上不再有单打或如果任何单打失败则失败:
o: -- t_0 -- t_1 -- t_2 -- ... -- t_n-1 --o // Success
OR
o: -- t_0 -- t_1 -- t_2 -- ... --X // Failure
优雅,我的意思是像这样简单的东西(在 Kotlin 中):
// Get single somehow (out of the scope of this question)
val s0: Single<T> = provideSingle()
// Get observable
val o: Observable<T> = s0.chain()
// Define extension method
fun Single<T>.chain(): Observable<T> {
/*
Implement here
*/
}
// Element interface
interface T {
fun next(): Single<T>?
}
这有什么适用性?
在使用带有分页功能的 REST API 时会发现这种情况,其中 Single 实例可用于检索单个页面,而这些页面又可以提供能够发出后续页面的 Single 实例。
【问题讨论】:
-
为什么投反对票?
标签: rx-java kotlin reactive-programming