除非另一个观察者完成它的工作,否则防止可观察者被启动

时间:2014-09-04 11:33:09

标签: reactive-programming rx-java

在我的应用客户端中使用Observable支持的服务。每个服务调用都是基于会话的,因此必须先启动会话,然后才能调用业务服务方法。

为了初始化会话,我做了一个Observable。我的问题是,无论何时客户端并行使用多个业务服务,会话初始化都会重复。客户端代码与会话无关。我需要一种方法来初始化会话,使会话observable只被调用一次(当第一个业务服务方法被调用时)。基本上所有后续业务观察者都必须等待条件(会话初始化)。你能为它绘制一个模式吗?

客户端代码如下所示:

protected void onCreate(Bundle savedInstanceState) {
    itemService.getItems(10).subscribe(new Observer<List<Item>>() {..});
    userService.getProfile().subscribe(new Observer<List<Profile>>() {..});
}

在进行2次调用时,我需要使会话Observable仅执行一次,并使业务Observable等待会话初始化完成,然后开始执行其操作{&1;}工作

感谢。

2 个答案:

答案 0 :(得分:2)

如果会话初始化是Observable,那么您可以使用delay运算符将会话初始化Observable作为参数延迟所有依赖它的其他Observable:http://reactivex.io/RxJava/javadoc/rx/Observable.html#delay%28rx.functions.Func1%29

答案 1 :(得分:0)

由于您已经实现了Observable会话,因此一种可能的解决方案是将其转换为AsyncSubject。它只会执行一次,并且只会向每个订阅者发送最后一项(或唯一的项目)。

根据会话初始化代码的工作方式,使用AsyncAsync.start()Async.startFuture()运算符之一来创建会话可观察对象可能更为优雅。