Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava中的FlatMap和Subscribe_Java_Rx Java_Observable_Rx Java2 - Fatal编程技术网

RxJava中的FlatMap和Subscribe

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(数据->{//调用另一个方法。})

我是RxJava的新手,我用RxJava2做了一些RESTful编程。我需要进行的API调用很少,它们彼此都是独立的。我从我的用例中观察到的是,由于API调用彼此异步,并且都返回
可观察值
,并且从所有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
阻塞)的方法将阻塞流。