我有两个可观测对象在如下所示的flatMap中链接在一起:
override fun getProductObservable(): Observable<List<ProductModel>> {
return observable1(productId)
.flatMap({
val limit = 8 - it.size
observable2(productId, limit)
}, { p1, p2 ->
p1.addAll(p2); p1 //simply return observables1's results already packed with p2 results
})
请注意observable2如何取决于observable1(limit参数)的结果。 两个可观察到的都返回相同的类型
现在我要问的问题是,我希望observable1一旦完成就立即调用订户的onNext,但仍然继续进行平面布置图。从本质上讲,onNext的订户将被两次调用。 一次(当observable1完成时),然后<< hen>再次(当整个通话结束时)。如何安排呢?
答案 0 :(得分:0)
发布它并连接到最后一个值!
observable1(productId)
.publish( { shared ->
Observable.concatArrayEager(
shared.flatMap({
val limit = 8 - it.size
observable2(productId, limit)
}, { p1, p2 ->
p1.addAll(p2);
}),
shared.takeLast(1)
)
})
答案 1 :(得分:0)
我简直不敢相信这有多么容易。我使用startWith,它发出了第一个可观察到的结果。一秒钟之后,最终结果就通过了。所以看起来像这样:
override fun getProductObservable(): Observable<List<ProductModel>> {
return observable1(productId)
.flatMap({
val limit = 8 - it.size
observable2(productId, limit)
.startWith(Observable.just(emptyList<ProductModel>()))
}, { p1, p2 ->
p1.addAll(p2); p1 //simply return observables1's results already packed with p2 results
})