Size: a a a

ReactiveX - русскоговорящее сообщество

2020 July 23

AA

Andrey Akimov in ReactiveX - русскоговорящее сообщество
Pavel Erokhin
Изучаю Rx (Java), не очень понятен момент с обработкой ошибок, я делаю что нужно в doOnError, но при повторном emitter.onNext(...) тупа ничего не происходит, я поставил таймаут, вот и после того как исключение TimeoutException бросается, обсервабля перестает реагировать на onNext
ну так Observable перестаёт эммитить данные после ошибки, если я правильно понял твой вопрос
источник

PE

Pavel Erokhin in ReactiveX - русскоговорящее сообщество
Да, правильно понял
источник

PE

Pavel Erokhin in ReactiveX - русскоговорящее сообщество
Как этого избежать?
источник

AA

Andrey Akimov in ReactiveX - русскоговорящее сообщество
хм. Опять-таки, смотря что ты имеешь ввиду. В целом - никак, так устроен эрыкс. Но есть всякие операторы, типа onErrorReturn() и т.д
источник

PE

Pavel Erokhin in ReactiveX - русскоговорящее сообщество
С onErrorReturn результат получается такой же, у меня исключение бросает timeout который я выше по цепочке до onError... "разместил"
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
карочи. Начал изучать реактор. срань какая-то...
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
нипанятна
источник

AD

Aleksey D. in ReactiveX - русскоговорящее сообщество
Артем Кулик
карочи. Начал изучать реактор. срань какая-то...
переходи на Kotlin Flow сразу
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
так я сразу на котлине и реакторе
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
2 дилдо сразу себе засунул
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
каеф
источник

AD

Aleksey D. in ReactiveX - русскоговорящее сообщество
Pavel Erokhin
С onErrorReturn результат получается такой же, у меня исключение бросает timeout который я выше по цепочке до onError... "разместил"
ошибка - терминальное состояние цепочки, после нее ничего не может происходить
если ты хочешь кидать ошибку из вручную созданного Observable, то попробуй работать с ивентами - сделай class CustomEvent, class Success : CustomEvent и class Failure : CustomEvent

тогда будешь только в onNext обрабатывать события свои
источник

AD

Aleksey D. in ReactiveX - русскоговорящее сообщество
Артем Кулик
2 дилдо сразу себе засунул
главное, чтобы тебе нравилось
источник

PE

Pavel Erokhin in ReactiveX - русскоговорящее сообщество
Aleksey D.
ошибка - терминальное состояние цепочки, после нее ничего не может происходить
если ты хочешь кидать ошибку из вручную созданного Observable, то попробуй работать с ивентами - сделай class CustomEvent, class Success : CustomEvent и class Failure : CustomEvent

тогда будешь только в onNext обрабатывать события свои
Да вот мне вообще ничего кидать не нужно, просто мне не понятно как сделать так, что бы обсервабля не отписывалась после таймаута

Она отписывается независимо от того как я обработаю ошибку, onErrorReturn, doOnError, во второй перегрузке subscribe
источник

AD

Aleksey D. in ReactiveX - русскоговорящее сообщество
Pavel Erokhin
Да вот мне вообще ничего кидать не нужно, просто мне не понятно как сделать так, что бы обсервабля не отписывалась после таймаута

Она отписывается независимо от того как я обработаю ошибку, onErrorReturn, doOnError, во второй перегрузке subscribe
а что за таймаут-то?
источник

AD

Aleksey D. in ReactiveX - русскоговорящее сообщество
пока какие-то заадки больше, лучше код свой покажи)
источник

PE

Pavel Erokhin in ReactiveX - русскоговорящее сообщество
Ну для теста поставил 40мс .timeout(40, TimeUnit.MILLISECONDS)
источник

PE

Pavel Erokhin in ReactiveX - русскоговорящее сообщество
fetchButtonObserver()
   .timeout(40, TimeUnit.MILLISECONDS)
   .subscribeOn(AndroidSchedulers.mainThread())
   .doOnNext { ... }
   .observeOn(AndroidSchedulers.mainThread())
   .observeOn(Schedulers.io())
   .map { heavyTaskHere() }
   .observeOn(AndroidSchedulers.mainThread())
   .onErrorReturn { defaultData() }
   .subscribe({ ... }) { ... }
источник

PE

Pavel Erokhin in ReactiveX - русскоговорящее сообщество
Вот такая у меня цепочка
источник

AD

Aleksey D. in ReactiveX - русскоговорящее сообщество
Pavel Erokhin
fetchButtonObserver()
   .timeout(40, TimeUnit.MILLISECONDS)
   .subscribeOn(AndroidSchedulers.mainThread())
   .doOnNext { ... }
   .observeOn(AndroidSchedulers.mainThread())
   .observeOn(Schedulers.io())
   .map { heavyTaskHere() }
   .observeOn(AndroidSchedulers.mainThread())
   .onErrorReturn { defaultData() }
   .subscribe({ ... }) { ... }
так, понятно, ведь timeout действительно кидает ошибку
а зачем он там нужен? его можно убрать и не будет проблем
источник