У меня четыре Flowable<Boolean>
с, task0
, task1
, task2
и task3
.Теперь task2
может перевернуть флаг, и если этот флаг станет истинным, цепочка должна начинаться с начала.* Если флаг не установлен, должно выполняться task3
.
В псевдокоде это будет примерно так:
boolean shouldRestart = false
do:
shouldRestart = false
execute task 0
execute task 1
execute task 2 <-- this might set shouldRestart to true
while shouldRestart == true
execute task 3
Как это переводится в RxJava?Я попытался смоделировать это так:
AtomicBoolean b = new AtomicBoolean(true);
task0.concatWith(task1)
.concatWith(task2)
.repeatWhen(f -> f.flatMap(b -> {
boolean a = b.getAndSet(false);
return a ? Flowable.just(b) : Flowable.empty();
}))
.concatWith(task3)
.subscribe(b -> System.out.println("b: " + b));
Это действительно правильно повторяет задачи 0, 1 и 2, но также вызывает конечного наблюдателя и никогда не выполняет задачу 3:
Task 0
b: true
Task 1
b: true
Task 2
b: true
Task 0
b: true
Task 1
b: true
Task 2
b: true
Результат, к которому я стремлюсь, таков:
Task 0
Task 1
Task 2
Task 0
Task 1
Task 2
Task 3
b: true
Как бы я подошел к этому?