2016-09-21 1 views
2

я следующий образец, demontrates проблемы:Observable.doOnCompleted() после того, как абонентское doOnCompleted() был вызван

Observable<Integer> observable = Observable.create(subscriber -> { 
    IntStream.range(0, 1_00).forEach(subscriber::onNext); 
    subscriber.onCompleted(); 
}).doOnCompleted(() -> System.out.println("I'm first, but want to be second")); 

observable.subscribe((i)-> {}, (e)-> System.err.println(e),()-> System.out.println("I'm second, but want to be first")); 

Если я заменяю наблюдаемый doOnCompleted с doAfterTerminate он работает, но он имеет несколько другой семантику.

Как достичь этого абонента onCompleted будет вызван до doOnCompleted на наблюдаемом?

ответ

0

Вы должны использовать doFinally() Это метод побочных эффектов, который будет вызываться после onCompleted.

Вы также можете refere это: https://stackoverflow.com/a/44922182/7409774

+0

Как я понял из документации это устаревший метод в пользу doAfterTerminate и поэтому имеет ту же семантику (будет называться даже если произошла ошибка), что примечание желаемое поведение HTTP: //reactivex.io/documentation/operators/do.html – marknorkin

 Смежные вопросы

  • Нет связанных вопросов^_^