Java 如何执行completable,然后使用single返回经过处理的结果?

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

我希望我的问题足够清楚

假设您有一个API,它通过IO流(输入和输出)支持的网络执行请求

使用RxJava(我将首次使用它),我认为可以做到以下几点:

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
    a
    Single
    ,则可以执行以下操作:

    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
    ,在数据准备就绪时触发。我现在必须继续这样做,因为我现在有链接两个操作的方法。特别是因为我想要/必须只有一个读卡器来确保数据以正确的顺序正确准备好。