我有这个问题,我一直在寻找,但找不到解决方案(或者我可能无法根据其他答案制定解决方案)。
我的问题是我需要找到一种方法来等待一个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。
答案 0 :(得分:2)
查看zip
,它将允许您组合两个observable的结果(如果需要,可以并行运行)。这是一个例子:
obs1.subscribeOn(Schedulers.io())
.zipWith(obs2.subscribeOn(Schedulers.io()), (x,y) -> new Both(x,y))
.doOnNext(both -> updateUI(both))
.subscribe();