我一直在寻找这个问题,但找不到解决方案(或者我无法根据其他答案提出解决方案)。
我的问题是,我需要找到一种方法来等待一个可观察对象(具有其自己的订户)并等待另一个可观察对象(具有其自己的订户)来完成。
这是方案:
obs1-> retryWith(tokenAuthenticator)-> Subscriber1->更新用户界面
obs2->需要等待obs1获得新令牌-> Subscriber2->
更新用户界面
我主要担心的是,我需要两个订户。以我的观点,obs1和obs2并行运行,但需要检查obs1是否以新的会话令牌结尾。也许这不是RxJava的主要目的。
Obs1连接到HTTP连接,并获得一个Json,该Json包含要填充UI的数据,obs2相同,但包含其他json和其他信息可以填充UI。
对我而言,唯一的问题是我的会话令牌每5分钟过期一次,而当我尝试获取新的会话令牌时,obs2已经使用过期的会话令牌进行了呼叫。
简单的解决方案是在onComplete()的Subscriber1中执行obs2,但我知道它必须是使用RxJava的更好的解决方案。
最佳答案
查看zip
,它将使您可以合并两个可观察值的结果(如果需要,可以并行运行)。这是一个例子:
obs1.subscribeOn(Schedulers.io())
.zipWith(obs2.subscribeOn(Schedulers.io()), (x,y) -> new Both(x,y))
.doOnNext(both -> updateUI(both))
.subscribe();