Size: a a a

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

2020 October 02

AP

Andrey Pomazkin in ReactiveX - русскоговорящее сообщество
нужен колбэк, о том, что подписка произошла и что-то выполнилось, тогда есть небольшая гарантия хоть какой-то очередности(
источник

AP

Andrey Pomazkin in ReactiveX - русскоговорящее сообщество
вобщем, тут такая архитектура и задача настолько мимо нее, что мне придется во многих местах заколачивать костыли
источник

AA

Andrey Akimov in ReactiveX - русскоговорящее сообщество
Andrey Pomazkin
привет, есть ли какой-то аналог onSubsribe, но чтобы он уже прошел после того, что было в subscribe?
хотя понимаю, что херню какую то хочу
onAfterTerminate()? Но он вообще после всего сработает
источник

AP

Andrey Pomazkin in ReactiveX - русскоговорящее сообщество
Andrey Akimov
onAfterTerminate()? Но он вообще после всего сработает
после complete?
источник

AP

Andrey Pomazkin in ReactiveX - русскоговорящее сообщество
нет, наверное не подойдет)
источник

AA

Andrey Akimov in ReactiveX - русскоговорящее сообщество
Andrey Pomazkin
нужен колбэк, о том, что подписка произошла и что-то выполнилось, тогда есть небольшая гарантия хоть какой-то очередности(
а какую задачу решаешь?
источник

AP

Andrey Pomazkin in ReactiveX - русскоговорящее сообщество
вобщем, все очень непросто.
во фрагментах нужна всплывашка от отсутствии инета, оно реализовано через базовый фрагмент, там в бозовом презентере проверяется это дело(интерцептор okhttp проверяет и кидает событие в релей некий, на который и подписан этот базовый презентер) и всплывашка работает.
но сейчас оказалось, что после некоторых действий ее не нужно показывать.
хорошо, если это все на одном экране, я просто блочу релей, а потом снова разрешаю его.
но иногда нужно сделать что-то на 1 экране и вернуться назад на 0 экран.
при этом у обоих экранов свой базовый презентер.
я заблочил релей на 1, вернулся на 0, и нужно чтобы отработали все попытки загрузки, и только тогда разрешить релей.
и получается, что не могу никак поймать то место, где его разблочить, потому что исполняются какие-то обращения и по их ходу генерируется событие и всплывашка показывается.
и сложно объяснить людям, что это вспывашка от других событий...
источник

AP

Andrey Pomazkin in ReactiveX - русскоговорящее сообщество
хотя не советую углубляться в мою проблему)
источник

AP

Andrey Pomazkin in ReactiveX - русскоговорящее сообщество
и при этом, фрагменты щас используются с вьюмоделями, но отнаследованы от базового фрагмента, где все еще базовый презентер.
хоть убейся от этого легаси(
источник
2020 October 05

AP

Andrey Prokhorenko in ReactiveX - русскоговорящее сообщество
Всем привет. Недавно задавал тут вопрос и получил отличный ответ, который породил новый вопрос.

Есть такая цепочкa:

mainObs.groupBy { emit-> emit.id}
   .flatMap { obs->
       obs.concatMap {...}
           .onErrorReturnNext { error ->
               return obs
           }
   }


То-есть задача взять обсервабл из groupBy и сделать так, чтобы если там прошла ошибка, перехватить ее и переподписать на этот же obs.
Проблема: конкретно этот кейс и почему-то только на rxJava 2 даёт краш с ошибкой

java.lang.IllegalStateException: Only one Observer allowed!


На RxSwift - все работает с таким же кодом.

Есть ли какая-то возможность этого избежать?

Пишу с телефон, за отсутствие пастбина - сори
источник

l

lenar in ReactiveX - русскоговорящее сообщество
Andrey Prokhorenko
Всем привет. Недавно задавал тут вопрос и получил отличный ответ, который породил новый вопрос.

Есть такая цепочкa:

mainObs.groupBy { emit-> emit.id}
   .flatMap { obs->
       obs.concatMap {...}
           .onErrorReturnNext { error ->
               return obs
           }
   }


То-есть задача взять обсервабл из groupBy и сделать так, чтобы если там прошла ошибка, перехватить ее и переподписать на этот же obs.
Проблема: конкретно этот кейс и почему-то только на rxJava 2 даёт краш с ошибкой

java.lang.IllegalStateException: Only one Observer allowed!


На RxSwift - все работает с таким же кодом.

Есть ли какая-то возможность этого избежать?

Пишу с телефон, за отсутствие пастбина - сори
и все таки - потоки бесконечны?
источник

l

lenar in ReactiveX - русскоговорящее сообщество
вот тут https://stackoverflow.com/questions/30491785/rxjava-java-lang-illegalstateexception-only-one-subscriber-allowed предлагают либо кешить, либо делать hot-connectable
источник

AP

Andrey Prokhorenko in ReactiveX - русскоговорящее сообщество
да, читал это решение. думал можно как-то подругому
источник

AP

Andrey Prokhorenko in ReactiveX - русскоговорящее сообщество
lenar
и все таки - потоки бесконечны?
да, бесконечны
источник

l

lenar in ReactiveX - русскоговорящее сообщество
если ошибки нужно просто пропустить (залогировать), то можно вместо onErrorResumeNext : .flatMap(v -> Flowable.just(v), thr -> Flowable.empty(), () -> Flowable.empty())
источник

AP

Andrey Prokhorenko in ReactiveX - русскоговорящее сообщество
lenar
если ошибки нужно просто пропустить (залогировать), то можно вместо onErrorResumeNext : .flatMap(v -> Flowable.just(v), thr -> Flowable.empty(), () -> Flowable.empty())
То-есть если я кину ошибку, то оно выполнит блок thr -> Flowable.empty() и подпишет на фловабл эмпти? Или подписка останется на тот же обсервабл, просто мы еще дернем Flowable.empty()?

Я пока что пишу, чтобы попробовать, так что если что - и сам щас узнаюю
источник

AP

Andrey Prokhorenko in ReactiveX - русскоговорящее сообщество
Я чаще работал с rxSwift. и там такого и подавно нет, к сожалению
источник

l

lenar in ReactiveX - русскоговорящее сообщество
флетмап с 3мя параметрами обработает в первой функции значение + обработка ошибки из этой обработки (если есть) + обработка конца выполнения
источник

AP

Andrey Prokhorenko in ReactiveX - русскоговорящее сообщество
спасибо, буду разбираться
источник

AP

Andrey Prokhorenko in ReactiveX - русскоговорящее сообщество
думаю, что с этим уже что-то можно придумать)
источник