我正在使用 rx-scala,它是 rx-java 的子项目。我将使用 Scala 语法,希望每个人都能理解。
我遇到了奇怪的行为,我不知道这是错误还是代表我滥用 rx 运算符。
问题陈述
我有一个ox: Observable[X]
和一个触发器 observable tr: Observable[()]
。我想要一个 observable oy
,它是ox
using function的转换f: Function[X,Y]
,但只有在触发时才会发生,因为f
它可能很昂贵。
如果 的最后一个值没有转换后的值ox
,则oy
应该是null
。
一些备注:
ox
很热,因为它是 UI 事件的结果。ox
println
正如我通过调试检查的那样,行为正确(值和时间) 。oy
在正确的时间开火;它只是使用过时的值ox
,当它是一个非空值时。
当前代码
oy = ox.sample(tr).map(f).merge(ox.map(x => null))
上面代码的问题是:它最初可以工作,但一段时间后,当触发 时,tr
它oy
会应用于. 不改变时,如果我反复触发,结果会更新并最终赶上。f
ox
ox
tr
如果我删除merge
to not reset to null
,那么一切正常(可能是因为效果看起来不确定)。
问题
我提供的代码有问题。
- 我想知道我是否做错了什么。
- 我欢迎实现我需要的其他方法。
对于 Jave 人
- 泛型/类型注释:
ox: Observable[X]
意味着Observable<X> ox
- lambdas:
x => null
意味着x -> null