Как остановить интервал от observable
Я новичок в rxjava, я хочу выполнять задачу опроса каждые 2 секунды в течение 50 раз, также она может завершиться, если какое-то условие встретится в задаче, я пытаюсь использовать Observable.interval
но я обнаружил, что нет никакого способа прекратить его, кроме как бросить исключение, есть ли другой оператор для достижения моей цели ?
Кстати, эта функциональность работает как API для обеспечения наблюдаемого объекта, поэтому я не могу контролировать подписчика и завершение отсканировать.
Observable.interval(timeout, interval, TimeUnit.SECONDS)
.flatmap(task - > task)
2 ответов
Я думаю Observable.takeUntil(stopPredicate)
или Observable.takeWhile(predicate)
могу помочь вам:
Observable.interval(timeout, interval, TimeUnit.SECONDS)
.takeWhile(val -> val < 42)
здесь observable завершится с 42-й попытки
вы можете остановить Observable.interval
С помощью takeUntil
следующим образом:
Observable.interval(0, 1, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.takeUntil(new Predicate<Long>() {
@Override
public boolean test(Long aLong) throws Exception {
return aLong == 10;
}
})
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.d(TAG, "Tick: " + aLong);
}
});
в этом примере через 10 секунд observable остановится.