Rxjava2-如何在可观察序列完成之前立即发射onNext()

时间:2018-11-06 08:24:26

标签: kotlin rx-java2

我有两个可观测对象在如下所示的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>再次(当整个通话结束时)。如何安排呢?

2 个答案:

答案 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
               })