CombineLatest与已完成的Observable

时间:2016-08-10 13:42:22

标签: java rx-java

我有以下观察结果:

Observable<Void> obsOne = thisOne.callsOnComplete();
Observable<User> obsTwo = thisOne.callsOnNextThenOnComplete();

现在,我想同时执行两个操作,然后获取obsTwo的结果并执行第三个操作。问题是zip / combineLatest似乎不起作用,因为obsOne不会发出任何项目。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

一种方法是实现第一个可观察的Observable<Void> obsOne = thisOne.callsOnComplete().materialize(); - 在这种情况下,它将发出至少一个通知

答案 1 :(得分:0)

使用concatMapEager(它会热切地订阅这两个observable并等待obsOne完成,然后才会发出obsTwo个项目:

Observable<User> doit =
  Observable
    .concatEager(
        obsOne.cast(User.class)
           .subscribeOn(Schedulers.computation()),
        obsTwo.subscribeOn(Schedulers.computation()))
    .doOnNext(user -> doSomething(user));

请注意,cast运算符会增加一些开销,如果您想避免它,可以执行此操作:

Observable<User> doit =
  Observable
    .concatEager(
      (Observable<User>)(Observable<?>) obsOne
         .subscribeOn(Schedulers.computation()),
       obsTwo.subscribeOn(Schedulers.computation()))
    .doOnNext(user -> doSomething(user));