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