Rx java 可观察的占位符?

Rx java 可观察的占位符?,rx-java,Rx Java,假设我有两个可观测的A和B。 当服务连接到我的程序时,将发出true。如果服务启动,则B发出true,否则为false 我想使用CombineTest组合A和B,然后采取适当的操作 问题是B在我连接到服务之前不可用。所以我的问题是,在B可用之前,我是否可以为B设置一个可观察的包装och占位符?然后,当B可用时,包装器应该发出来自B的值。也许您可以使用delaySubscription实现这一点。下面是一个例子: ExecutorService executorService = Executor

假设我有两个可观测的A和B。 当服务连接到我的程序时,将发出true。如果服务启动,则B发出true,否则为false

我想使用CombineTest组合A和B,然后采取适当的操作


问题是B在我连接到服务之前不可用。所以我的问题是,在B可用之前,我是否可以为B设置一个可观察的包装och占位符?然后,当B可用时,包装器应该发出来自B的值。

也许您可以使用delaySubscription实现这一点。下面是一个例子:

ExecutorService executorService = Executors.newCachedThreadPool();
Future<Void> future = executorService.submit(() -> {
  Thread.sleep(3000);
  //service started
  return null;
});
Observable<Void> oFuture = Observable.from(future, Schedulers.newThread());
Observable<Long> oA = Observable.interval(1, TimeUnit.SECONDS);
Observable<Long> oB = Observable.interval(100, TimeUnit.MILLISECONDS);
Observable<Long> delayedObservable = oB.delaySubscription(new Func0<Observable<Void>>() {
  @Override public Observable<Void> call() {
    return oFuture;
  }
});
Observable<String> stringObservable = Observable.combineLatest(oA, delayedObservable, (i1, i2) -> i1 + "-" + i2);
executorService.submit(() -> {
  stringObservable.forEach(System.out::println);
});
Thread.sleep(10000);
executorService.shutdownNow();
ExecutorService ExecutorService=Executors.newCachedThreadPool();
Future=executorService.submit(()->{
睡眠(3000);
//服务启动
返回null;
});
真实的可观察性=可观察的.from(future,Schedulers.newThread());
可观测oA=可观测间隔(1,时间单位秒);
可观测oB=可观测间隔(100,时间单位毫秒);
Observable delayedObservable=oB.delaySubscription(新函数0(){
@覆盖公共可观察调用(){
真实的回归;
}
});
可观测的弦可观测的=可观测的。组合相关测试(oA,延迟可观测,(i1,i2)->i1+“-”+i2);
executorService.submit(()->{
stringObservable.forEach(System.out::println);
});
睡眠(10000);
executorService.shutdownNow();

我想出了一个简单的解决方案

我创建了一个主题C,像这样

BehaviorSubject<Boolean> C = BehaviorSubject.create(false);
Observable.combineLatest(A, C, bla bla....
那么当B有空的时候我会

B.subcribe(C);

你真正想说的是B依赖于A。大多数情况下,当你有一个可观察对象依赖于另一个时,你可以使用.flatMap()来表达这种关系

Observable createobservableea(){
return…;//与当前用于创建可观察A的相同。
}
可观测的createObservableB(){
返回createobservea()
.flatMap(服务连接->{
如果(!serviceConnected){
//不要向订阅者发送任何内容。
return-Observable.empty();
}
return…;//服务现在已连接创建可观察B。
});
}

谢谢,我想出了一个更简单的解决方案,请看我自己的答案。