java - 在 doOnNext 方法中订阅另一个 observable

标签 java reactivex

我正在使用ReactiveX 1 (无法迁移到版本 2)。

这只是问题的一个例子,但假设我想 save使用响应式(Reactive)的实体 repository 。它返回 saveResult 的可观察量,该可观察量由上面的层(例如 Controller )订阅。

但是如果 save成功了,我需要发送event 。发送事件也是 react 性的,并返回 Observable 。我实际上并不关心它的结果(有一些日志,仅此而已)。

我已经按照以下方式完成了它,但它看起来有点难看,因为 Observableception有没有办法让它更干净?我会满意一些Observable<T> peek(rx.functions.Func1<? super T, Observable<?> func) ,但我找不到它

public Observable<Result<Entity>> save(Entity entity){
return entityRepository.saveEntity(entity) //Observable<Result<Entity>>
    .doOnNext(saveResult -> saveResult
        .ifSuccessful(entity -> sendEntityCreatedEvent(entity)) //Observable<Result<EntityCreatedEvent>>
            .subscribe()

}

谢谢,

泰夫雷尔

最佳答案

我猜你可以使用flatMap来运行保存Observable,至少这样你就不会破坏Observable链。

public Observable<Result<Entity>> save(Entity entity){
return entityRepository.saveEntity(entity) //Observable<Result<Entity>>
    .flatMap(saveResult -> saveResult
        .ifSuccessful(entity -> sendEntityCreatedEvent(entity)) //Observable<Result<EntityCreatedEvent>>
            .map(entity -> saveResult)
    )
}

由于您需要前一个 Observable 的结果,只需将此 Observable 的结果映射到旧结果即可。

关于java - 在 doOnNext 方法中订阅另一个 observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54783851/

相关文章:

java - 如何异步调用多个可观察的调用,同时在这些调用之前和之后同步执行一些计算?

ios - 关于自定义 RxSwift Observable 扩展的问题

java - RxJava Observable 最短执行时间

java - 连续执行不同的Completables

Java读取文件并写入数组

java - 方法未返回数组的正确值。我究竟做错了什么?

java - 需要找到有内部文本的element元素

java - 生成 Observable 发出的值

java - 比较两组并删除共同项目

java - Swagger注解遍历DB中所有表