RxJava 等待一个与订阅者一起观察的对象 等待另一个与另一个订阅者一起观察的对象

RxJava wait for one observable with subscriber wait for another observable with other subscriber

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

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

场景是这样的:

obs1 -> retryWith(tokenAuthenticator) -> subscriber1 -> Update UI

obs2 -> Needs to wait for obs1 to get new token -> subscriber2 -> Update UI

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

Obs1 连接到一个 HTTP 连接并获得一个 Json,其中包含要填写 UI 的数据,对于 obs2 也是如此,但会使用其他 json 和其他信息来填写 UI 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();