Подписка на другое наблюдаемое в методе doOnNext - PullRequest
0 голосов
/ 20 февраля 2019

Я использую 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 голосов
/ 20 февраля 2019

Полагаю, вы можете использовать flatMap для запуска сохранения 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 на старый результат.

...