【发布时间】:2017-10-06 21:47:51
【问题描述】:
我试图有一个模式,其中我的 observable 产生一些对象,被转换为域事件,如 Started、Success、Error 在 observable 产生周围发出,如果这有意义的话
public Observable<BookRenderingEvent> extractAndRenderObservable(String epubPath) {
return extractObservable(epubPath)
.flatMapObservable(extractedEpub -> renderObservable(extractedEpub)
.<BookRenderingEvent>map(renderedEpub -> new BookRenderingEvent.Success(renderedEpub))
.onErrorReturn(t -> new BookRenderingEvent.Error())
.startWith(new BookRenderingEvent.Started()));
}
private Observable<RenderedEpub> renderObservable(ExtractedEpub extractedEpub) {
return Observable.combineLatest(readerConfigObservable(), pagerDimensionsObservable(), ..)
.switchMapSingle(foo -> doRenderObservable()) <--- heavy work
.map(bar -> new RenderedEpub(bar))
}
renderObservable 包含一个繁重的操作,所以我想发出这些状态事件,以便 UI 可以做出相应的反应(成功包含提取的 Epub 对象,如您在地图中看到的)
我的问题是,renderObservable 包含 combineLatest(),因此它“保持打开状态”并在其 obervable 发出时及时发出多次。
所以事件流程是 Started, Success, Succes ... Success。
我希望它是 Started、Success、Started、Success .. 等。 即在 combineLatest 发出时预先添加 Started 事件,但我的 rx 知识不足。 p>
谢谢
【问题讨论】:
标签: java android rx-java reactive-programming rx-java2