我有以下观察结果:
Observable<Void> obsOne = thisOne.callsOnComplete();
Observable<User> obsTwo = thisOne.callsOnNextThenOnComplete();
现在,我想同时执行两个操作,然后获取obsTwo
的结果并执行第三个操作。问题是zip
/ combineLatest
似乎不起作用,因为obsOne
不会发出任何项目。我怎样才能做到这一点?
答案 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));