android - RxJava2 和 Android 复杂的可观察链
问题描述
我使用 Rx Java 2 已经有一段时间了,但最近遇到了一个让我难过的情况。我有一个半复杂的操作链,并希望将“状态对象”传递到链中。
有 4 次操作,在此期间我希望重复操作 2 和 3(连续,而不是一起),直到某些条件成立。我知道我可以通过使用 andThen() 链接每个操作来解决这个问题,但这限制了我将状态对象向下传递而不到达链外的能力。
我需要一个状态对象的原因是因为我需要在第一次操作期间保存一个初始值,并将其与操作 4 期间收到的值进行比较,以确定整个过程是否成功。
关于哪些 RxJava2 运算符可以帮助我实现操作 2 和 3 的正确重复条件的任何线索?如果可能的话,我宁愿不嵌套 observables。
解决方案
您可以将状态保留为 someAtomicReference<State>
并使用repeatUntil
运算符。
AtomicReference<State> state = new AtomicReference<>();
Completable operation = Completable.create() // do something and modify state
.repeatUntil(() -> state.get() == SATISFYING_CONDITION);
您可以轻松地将这些 Completable 与andThen
推荐阅读
- python-3.x - 使用变量名字符串递增整数
- linux-kernel - phandle 内核没有在正确的地址上查找
- google-chrome - 使用 jQuery 的跨域 ajax 请求不发送 cookie
- jquery - 在 jquery 的自动完成中添加具有空值的自定义项
- html - fit-content 属性覆盖网格中的其他属性
- python - 使用关键字将 Python 列表解析为 pandas.DataFrame
- python - python列到一个单元格
- html - 可以使 z-index 工作,因为它甚至应该使它们是绝对位置
- python - 当 Space = 5 时,为什么我的 Python 脚本没有运行它应该运行的代码?
- php - 使用智能优惠券创建批量优惠券 - 但对于特定类别的产品是强制性的