订阅doOnNext方法中的另一个observable

问题描述 投票:1回答:1

我正在使用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

java reactivex
1个回答
2
投票

我想你可以使用flatMap运行save 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的结果映射到旧结果。

© www.soinside.com 2019 - 2024. All rights reserved.