【发布时间】:2017-12-12 22:27:59
【问题描述】:
我有一个我似乎无法弄清楚的简单用例。
给定 2 个 observables,A 和 B
A 在 B 发射第一个项目后开始发射项目,B 可以继续发射项目,这应该不再影响 A。
我需要这个,因为 A 需要 B 发出的第一个值才能开始发出。
我已经尝试了 skipUntil 和 startWith 都无济于事。
【问题讨论】:
标签: rxjs rx-java observable rx-java2 reactivex
我有一个我似乎无法弄清楚的简单用例。
给定 2 个 observables,A 和 B
A 在 B 发射第一个项目后开始发射项目,B 可以继续发射项目,这应该不再影响 A。
我需要这个,因为 A 需要 B 发出的第一个值才能开始发出。
我已经尝试了 skipUntil 和 startWith 都无济于事。
【问题讨论】:
标签: rxjs rx-java observable rx-java2 reactivex
我觉得flatMap可以帮你做你想做的事:
Observable<Integer> createA(Observable<Integer> B) {
return B.take(1).flatMap(b -> {
/* replace with your Observable A implementation here */
BehaviorSubject<Integer> subjectA = BehaviorSubject.create();
return subjectA;
});
}
此方法返回一个 Observable A,它仅在使用 Observable B 发出的第一个值初始化后才开始发射。
【讨论】:
getInit(),它返回初始化Observable(本质上返回上面的B.take(1)),然后其他依赖的方法基本上是return getInit().flatMap(...)。因此,同样的模式,他们只是使用一种方法来获取 init Observable 而不是将其传入。这可能更多地取决于您如何使用每个 Observable 的细节。