我需要订阅一个可观察者,谁需要另一个可观察者来订阅。像这样:
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 ,但我认为这不是最佳解决方案。
注意:我需要使用阻止获取,因为我希望阻止获取的响应是控制器响应。