RxJava等待一个可观察的订阅者等待与另一个订阅者

时间:2016-12-06 17:34:34

标签: android rx-java reactive-programming rx-android

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

我的问题是我需要找到一种方法来等待一个observable(有自己的订阅者)并等待另一个observable(有自己的订阅者)完成。

这是情景:

  

obs1 - > retryWith(tokenAuthenticator) - > subscriber1 - >更新用户界面

     

obs2 - >需要等待obs1获得新令牌 - > subscriber2 - >   更新用户界面

我主要担心的是我需要两个订阅者。对于我的观点,obs1和obs2并行运行,但需要检查obs1是否以新会话令牌结束。也许这不是RxJava的主要目的。

Obs1连接到一个HTTP连接并获取一个带有数据的Json来填充UI,对于obs2也是如此,但是用其他json和其他信息来填充UI。

对我来说唯一的问题是我的会话令牌每5分钟到期一次,当我尝试获取新的时候,obs2已经使用过期的会话令牌进行呼叫。

简单的解决方案是在onComplete()subscriber1中执行obs2,但我知道它必须是一个更好的解决方案,使用RxJava。

1 个答案:

答案 0 :(得分:2)

查看zip,它将允许您组合两个observable的结果(如果需要,可以并行运行)。这是一个例子:

obs1.subscribeOn(Schedulers.io())
    .zipWith(obs2.subscribeOn(Schedulers.io()), (x,y) -> new Both(x,y))
    .doOnNext(both -> updateUI(both))
    .subscribe();