订阅doOnNext方法中的另一个可观察对象

时间:2019-02-20 10:16:34

标签: java reactivex

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

这只是问题的一个例子,但我想使用反应式save repository来创建实体。它返回一个可观察到的saveResult,该结果由上一层(例如控制器)订阅。

但是如果save成功了,我需要发送一个event。发送事件也是反应性的,并返回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()

}

谢谢

Tyvrel

1 个答案:

答案 0 :(得分:1)

我猜您可以使用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的结果映射到旧结果即可。

相关问题