我一直在寻找这个问题,但找不到解决方案(或者我无法根据其他答案提出解决方案)。

我的问题是,我需要找到一种方法来等待一个可观察对象(具有其自己的订户)并等待另一个可观察对象(具有其自己的订户)来完成。

这是方案:


  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();

09-20 18:33