如何创建rx.Single的缓存/热门版本?

ato*_*tok 18 java reactive-programming kotlin rx-java

RxJava v1.0.13引入了一种新的Observable:rx.Single.它非常适合请求 - 响应模型,但缺少引入doOnNext()等运算符的标准副作用.因此,结果会发生很多事情要困难得多.

我的想法是用同一个Single实例的多个订阅替换doOnNext().但这可能导致底层工作多次完成:每次订阅一次.

示例rx.Single实现:

private class WorkerSubscribe<SomeData>() : Single.OnSubscribe<SomeData> {
    override fun call(sub: SingleSubscriber<in SomeData>) {
        try {
            val result = fetchSomeData()
            sub.onSuccess(result)
        } catch(t: Throwable) {
            sub.onError(t)
        }
    }
}

val single = Single.create<SomeData>(WorkerSubscribe())
Run Code Online (Sandbox Code Playgroud)

用法:

single.subscribe({}, {})
single.subscribe({}, {})   // Data is fetched for the second time
Run Code Online (Sandbox Code Playgroud)

是否有可能创建一个单独的实例,即使多次调用single.subscribe(),也不会多次fetchSomeData(),但缓存并返回相同的结果?

Ser*_*kov 2

您需要RxJava 主题BehaviorSubjectAsyncSubject

  • 您会发布一个代码示例,以便不需要推断解决方案吗? (3认同)
  • 这难道不是从一开始就使用 Single 的做法吗? (2认同)