【问题标题】:Make original Observable complete when the one inside flatMap completes当 flatMap 内部完成时,使原始 Observable 完成
【发布时间】:2019-02-08 04:09:24
【问题描述】:

我有一个Observable,我在其上应用flatMap 运算符。当第二个完成时,是否可以使这个原始的Observable 完成?

这里是代码。

Observable.never<Int>()
        .startWith(0)
        .doOnComplete { println("Completed") } // Not called.
        .flatMap { Observable.fromArray(1, 2, 3, 4, 5) /* Completes after 5 */ }
        .subscribe(::println)

输出是:

1
2
3
4
5

我正在尝试实现以下输出:

1
2
3
4
5
Completed

【问题讨论】:

    标签: kotlin rx-java2


    【解决方案1】:

    您可以使用运算符materialize,这将帮助您获取有关flatMap 内部正在发生的事情的信息。然后你可以在收到onComplete 通知时处理上游(只接受onNext 通知)。

        Observable.<Integer>never()
                .startWith(0)
                .flatMap(integer -> Observable.range(1, 5)
                        .materialize())
                .takeWhile(notification -> notification.isOnNext())
                .map(notification -> notification.getValue())
                .doOnComplete(() -> System.out.println("Completed"))
                .subscribe(integer -> System.out.println(integer));
    

    结果

    1
    2
    3
    4
    5
    Completed
    

    【讨论】:

      猜你喜欢
      • 2017-03-29
      • 1970-01-01
      • 2020-08-11
      • 2019-05-24
      • 2018-10-06
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多