如何订阅需要另一个热订阅的可观察者-RxJava

时间:2018-12-24 22:42:14

标签: java kotlin reactive-programming rx-java2

我需要订阅一个可观察者,谁需要另一个可观察者来订阅。像这样:

val someSingle = Single.create<Response>{singleEmmiter ->
        dataStream.subscribe {elementInDataStream->
            if(elementInDataStream == "somethingiwant"){
                .
                .
                .
                val someresponse = //someCode
                singleEmmiter.onSuccess(someResponse)
            }
        }
    }

我必须这样做,因为在dataStream中我可以拥有任何东西,也许我可以使用dataStream对象的多个元素(所以我认为我无法对dataStream进行过滤之类的操作)。 其中dataStream是 ConnectableObservable(可热观察)

的实例
val dataStream = listOf("hello","world", "somethingiwant").toObservable().publish()

然后我有类似的内容:

someSingle.blockingGet()
dataStream.connect()

该代码将永无止境,因为someSingle正在生成阻塞等待,并等待dataStream中的某些元素,但是dataStream尚未发送任何元素。生成无限块。

如果我这样更改代码:

dataStream.connect()   
someSingle.blockingGet()

它产生并发问题,因为可能元素 “某事” 已发布在热门观察报上,因此我的封锁将永远不会结束。

也许某些解决方案是使用 ReplaySubject 而不是 ConnectableObservable ,但我认为这不是最佳解决方案。

注意:我需要使用阻止获取,因为我希望阻止获取的响应是控制器响应。

0 个答案:

没有答案