我是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个流程有何不同?订阅总是在异步?
答案 0 :(得分:2)
Rx中的订阅者默认是同步的。使它运行异步管道的唯一方法是使用subscribeOn或observerOn运算符。
在你的情况下使用flatMap也是正确的,你必须使用flatMap来编写函数,用以前的API响应信息调用新的API。
如果其中一些API调用没有响应,您可以始终在flatMap运算符中使用timeout来进行补偿。