在RxJava中进行FlatMap和订阅

时间:2018-02-13 06:47:32

标签: java rx-java observable rx-java2

我是RxJava的新手,我正在使用RxJava2进行一些RESTful编程。我几乎没有API调用,它们彼此都是独立的。我从我的用例中观察到的是,由于API调用彼此异步并且都返回Observables<String>,并且从所有API响应中我正在进行一些计算,所以在计算时,我还没有来自少数API的响应,因此它失败了。对于那些尚未收到回复的API,我正在使用subscribe,如下面的代码:

Observable<String> res = someApiCall(data1,data2);
    res.subscribe(data -> { //Call Another Method.})

对于收到回复的代码是:

return someApiCall.flatMap(data -> { // Call Another Method})

我的问题是:使用FlatMap会阻止它吗?我上面描述的2个流程有何不同?订阅总是在异步?

1 个答案:

答案 0 :(得分:2)

Rx中的订阅者默认是同步的。使它运行异步管道的唯一方法是使用subscribeOn或observerOn运算符。

https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/scheduler/ObservableAsynchronous.java

在你的情况下使用flatMap也是正确的,你必须使用flatMap来编写函数,用以前的API响应信息调用新的API。

如果其中一些API调用没有响应,您可以始终在flatMap运算符中使用timeout来进行补偿。

http://reactivex.io/documentation/operators/timeout.html