Java 如何执行completable,然后使用single返回经过处理的结果?
我希望我的问题足够清楚 假设您有一个API,它通过IO流(输入和输出)支持的网络执行请求 使用RxJava(我将首次使用它),我认为可以做到以下几点:Java 如何执行completable,然后使用single返回经过处理的结果?,java,api,io,rx-java,rx-java2,Java,Api,Io,Rx Java,Rx Java2,我希望我的问题足够清楚 假设您有一个API,它通过IO流(输入和输出)支持的网络执行请求 使用RxJava(我将首次使用它),我认为可以做到以下几点: public Single<MyData> getMyDataFromApi() { return requestMyData() .map/flat/then()->waitAndprocessData() // here is the missing link for me. What can
public Single<MyData> getMyDataFromApi() {
return requestMyData()
.map/flat/then()->waitAndprocessData() // here is the missing link for me. What can I use ?
.andThen()->returnData()
return requestMyData().andThen(waitAndprocessData());
公共单一getMyDataFromApi(){
return requestMyData()
.map/flat/then()->waitAndprocessData()//这是我缺少的链接。我可以使用什么?
.andThen()->returnData()
正如您所理解的,方法requestMyData
返回一个Completable
,它只负责并仅任务它执行所述请求(IO类型操作)
然后,在执行请求时,远程实体应进行处理,并通过执行IO类型的操作将结果返回到请求的MyData
对象
这里的关键点是,我使用的是流(输入和输出),读写操作显然是在单独的IO线程中执行的(使用Schedulers.IO()
)
最后,有没有办法让我的getMyDataFromApi()
方法执行以下操作:
单一的或可以是map
方法中的lambada
单个
总之,我坚信
requestMyData
的签名应该是单个的签名,因为它是getter,我期待结果或错误。如果没有方法的实现,就很难理解真正的问题。
如果requestMyData
返回一个Completable
和waitAndprocessData
aSingle
,则可以执行以下操作:
public Single<MyData> getMyDataFromApi() {
return requestMyData()
.map/flat/then()->waitAndprocessData() // here is the missing link for me. What can I use ?
.andThen()->returnData()
return requestMyData().andThen(waitAndprocessData());
无论如何,请记住,可完成的
是没有任何值的计算,但仅表示完成(或异常).推荐阅读:谢谢你的链接。我似乎明白了,但问题是我必须在混合中有一个可完成的,所以它什么也不返回……因为没有什么可返回的。我基本上是在输出流中写入字节,我通过从输入流中读取来等待结果。为什么你不是把requestMyData改为Single,这样你就可以在数据准备好时把它取回吗?它是一个Single(基于它的签名)因为我希望链接一个实际等待结果并返回结果的方法。但是我想我可以尝试创建一个侦听传入数据的方法。谢谢提示!谢谢你的回答我理解你的观点。我的问题是我有两个操作,它们是完全异步的,我无法我有一个inputstream,只要连接处于活动状态,我就从中阻止读取传入数据,还有一个outputstream,我从中写入要发送的数据
我正在有效地将字节写出来,当答案出现时,块读取释放并返回结果,然后再次开始块读取以供下一个请求。因此,两个异步操作,我如何连接它们?同时,我发现的解决方案是启动第二个链,该链带有一个SingleSubject
,在数据准备就绪时触发。我现在必须继续这样做,因为我现在有链接两个操作的方法。特别是因为我想要/必须只有一个读卡器来确保数据以正确的顺序正确准备好。