gpt4 book ai didi

java - RxJava : How to prepend startWith() default emit EVERY TIME parent observable emits?

转载 作者:行者123 更新时间:2023-11-30 10:24:15 27 4
gpt4 key购买 nike

我正在尝试建立一种模式,在这种模式下,我的产生某些对象的可观察对象被转换为领域事件,例如围绕可观察对象产生的 Started、Success、Error,如果这有意义的话

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 可以做出相应的 react (成功包含 extractedEpub 对象,如您在 map 中所见)

我的问题是,renderObservable 包含 combineLatest(),因此它“保持打开状态”并在其 obervables 发出时及时发出多次。

所以事件流是 Started, Success, Succes ... Success.

我希望它是 Started、Success、Started、Success .. 等,即在 combineLatest 发出时预先添加 Started 事件,但我的 rx 知识不足。 p>

谢谢

最佳答案

您可以将以下内容插入到可观察链的正确位置:

.flatMap( event -> Observable.just( new BookRenderingEvent.Started(), event )

这将在它接收到的每个事件之前发出 Started 事件。

当然,您可以添加一些逻辑,这样您就不会在事件为 Started 时发出 Started,等等。

关于java - RxJava : How to prepend startWith() default emit EVERY TIME parent observable emits?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46614380/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com