我正在使用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
我想你可以使用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
的结果映射到旧结果。