RxJava阻塞流直到其他观察者完成

时间:2015-09-17 15:04:37

标签: rx-java

我在后台有一个长时间运行的处理文件,并使用BehaviorSubject将其发布到subject.onNext(progress),并在完成后调用subject.onCompleted

在流程的某个时刻,我想订阅subject并获取当前进度或等到它完成。

prepareOtherStuff()
    .flatMap(validate())
    .????? <- want to subscribe here
    .map(finalize())
    .subscribe()

我遇到了?????部分的问题。无法弄清楚如何阻止流并等待文件处理完成并获得文件处理进度以将其显示给用户。

例如:

-- other files already processed, don't care about them --
File 8 of 10 processed
File 9 of 10 processed
-- onCompleted received --

我如何实现这种行为?

1 个答案:

答案 0 :(得分:1)

您可以使用.concatWith(其中TheType是从.flatMap(validate())返回的Observable的泛型类型):

prepareOtherStuff()
  .flatMap(validate())
  .concatWith(subject
             .doOnNext(m -> log.info(m))
             .ignoreElements()
             .cast(TheType.class))
  .map(finalize())
  .subscribe()