Rx java оператор тайм-аута, учитывает только элементы, выбрасываемые из указанной c точки - PullRequest
1 голос
/ 20 февраля 2020

У меня есть наблюдаемая цепочка rx java с набором операторов. Допустим, у меня есть источник Observable (отправка элементов всегда каждую минуту), оператор B, выполняющий сетевой запрос, и оператор тайм-аута. Я хочу, чтобы оператор тайм-аута учитывал только элементы, испускаемые оператором B, но игнорировал те, которые испускались источником Observable. Я хочу завершить подписку, если за один час от оператора B не было отправлено ни одного элемента, например, когда сервер не работает, и подписчику не выдается никаких результатов.

Пример:

Observable.timer(1, TimeUnit.SECONDS)
   .flatMap { performNetworkRequest() }
   .timeout(1, TimeUnit.HOUR)

Так что моя идея - закончить этот таймер через час без ответа сервера. Но оператор тайм-аута не работает таким образом, поскольку он сбрасывается один раз, когда наблюдаемый таймер выдает новый элемент каждую минуту.

1 Ответ

0 голосов
/ 21 февраля 2020

Это то, что Do c говорит

Оператор Timeout позволяет вам прервать Observable с завершением onError, если этот Observable не может излучать какие-либо элементы в течение указанного промежутка времени.

- Здесь вы посылаете объект каждую минуту, поэтому он не работает так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...