RxJava中的FlatMap和Subscribe
我是RxJava的新手,我用RxJava2做了一些RESTful编程。我需要进行的API调用很少,它们彼此都是独立的。我从我的用例中观察到的是,由于API调用彼此异步,并且都返回RxJava中的FlatMap和Subscribe,java,rx-java,observable,rx-java2,Java,Rx Java,Observable,Rx Java2,我是RxJava的新手,我用RxJava2做了一些RESTful编程。我需要进行的API调用很少,它们彼此都是独立的。我从我的用例中观察到的是,由于API调用彼此异步,并且都返回可观察值,并且从所有API响应中我进行了一些计算,因此在计算时,我还没有收到来自少数API的响应,因此它失败了。对于所有尚未收到响应的API,我使用了subscribe,如下代码所示: Observable res=someApiCall(数据1,数据2) res.subscribe(数据->{//调用另一个方法。})
可观察值
,并且从所有API响应中我进行了一些计算,因此在计算时,我还没有收到来自少数API的响应,因此它失败了。对于所有尚未收到响应的API,我使用了subscribe
,如下代码所示:
Observable res=someApiCall(数据1,数据2)代码>
res.subscribe(数据->{//调用另一个方法。})
对于收到响应的项目,代码为:
返回someApiCall.flatMap(数据->{//Call other Method})
我的问题是:使用FlatMap会导致阻塞吗?我上面描述的两个流程有何不同?订阅总是异步的吗 默认情况下,Rx中的订阅服务器是同步的。使其在管道中异步运行的唯一方法是使用subscribeOn或observerOn运算符
同样,flatMap的使用在您的案例中是正确的,您必须使用flatMap来组合函数,这些函数使用以前的API响应信息调用新的API
如果其中一些API调用没有响应,您可以始终在flatMap操作符中使用timeout来进行补偿
这可能会有所帮助。与大多数Stream
方法相比,flatMap()
的当前实现非常迫切。它在返回之前完全填充流,因此第一个调用另一个阻塞(或者如果someApiCall
阻塞)的方法将阻塞流。