1

我有两个像这样在 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 的结果(限制参数)。 两个 OBSERVABLE 返回相同的类型

现在到我的问题上,我希望 observable1 完成后立即调用订阅者的 onNext,但仍继续使用平面图。本质上,订阅者 onNext 将被调用两次是我想要的;observable1 完成时一次,然后在整个调用完成时再次。这怎么安排?

4

2 回答 2

0

我简直不敢相信这是多么容易。我使用了 startWith,它发出了第一个 observable 的结果。一秒钟后,最终结果出来了。所以它看起来像这样:

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
               })
于 2018-11-06T11:30:58.100 回答
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)
     )
})
于 2018-11-06T08:33:47.793 回答