Зарегистрировать несколько процедур завершения

#scala #rx-java

#scala #rx-java

Вопрос:

У меня есть, Observable который построен из Stream[Item] ( Item вот только для примера) Это наблюдаемое проходит через набор преобразований:

 val observable: Observable[Item] = ... //construct observable from stream
val observable1: Observable[AnotherItem1] = observable.map(...) //transform to AnotherItem1
val observable2: Observable[AnotherItem2] = observable1.map(...) //transform to AnotherItem2
  

Я хочу выполнить некоторые действия по завершению каждого преобразования (первого и второго).
Если я вызываю doOncompleted метод observable1 и observable2 не получаю желаемого эффекта (на самом деле я не наблюдаю никаких побочных эффектов).

Как я могу этого добиться? Возможно ли это?

Комментарии:

1. Вы ожидаете, что ваши «действия» будут выполняться после того, как каждое из них Item преобразуется в AnotherItem1 , или после того, как весь observable поток будет преобразован в observable1 ?

Ответ №1:

Вы пробовали регистрировать какую-либо информацию с помощью .doOnNext() ? Возможно, что ни один из наблюдаемых объектов не завершается, объясняя, почему .doOnCompleted() не был вызван. Убедитесь, что наблюдаемые завершены, если вы хотите иметь побочный эффект при завершении.

Комментарии:

1. Получу ли я желаемое поведение при таком подходе? Я создаю наблюдаемый как val observable: Observable[Int] = Observable.from(Stream(1,2,3,4))

2. Это зависит от того, какое поведение вы хотите. Вы хотите выполнить побочные эффекты при завершении, то есть в doOnCompleted . Было бы очень полезно, если бы вы показали, какие преобразования вы выполняете (т. Е. заменили ... в коде).

3. Предположим, я делаю только map и groupBy

4. Как observable1 зависит от наблюдаемого? И observable2 ?

5. observable1 = observable.map , observable2 = observable1.map