首页 > 解决方案 > RxJava2 和 Android 复杂的可观察链

问题描述

我使用 Rx Java 2 已经有一段时间了,但最近遇到了一个让我难过的情况。我有一个半复杂的操作链,并希望将“状态对象”传递到链中。

rx 操作的基本流程

有 4 次操作,在此期间我希望重复操作 2 和 3(连续,而不是一起),直到某些条件成立。我知道我可以通过使用 andThen() 链接每个操作来解决这个问题,但这限制了我将状态对象向下传递而不到达链外的能力。

我需要一个状态对象的原因是因为我需要在第一次操作期间保存一个初始值,并将其与操作 4 期间收到的值进行比较,以确定整个过程是否成功。

关于哪些 RxJava2 运算符可以帮助我实现操作 2 和 3 的正确重复条件的任何线索?如果可能的话,我宁愿不嵌套 observables。

标签: androidkotlinrx-java2

解决方案


您可以将状态保留为 someAtomicReference<State>并使用repeatUntil运算符。

 AtomicReference<State> state = new AtomicReference<>();
 Completable operation = Completable.create() // do something and modify state
        .repeatUntil(() -> state.get() == SATISFYING_CONDITION);

您可以轻松地将这些 Completable 与andThen


推荐阅读