合并采样的Observable时遇到的问题

时间:2015-05-22 09:16:29

标签: scala rx-java rx-scala

我使用rx-scala,它是rx-java的子项目。我将使用Scala语法并希望每个人都理解。

我遇到了奇怪的行为,而且我不知道这是否是代表我的rx运营商的错误或误用。

问题陈述

我有ox: Observable[X]和触发器可观察tr: Observable[()]。我想要一个可观察的oy,它是ox使用函数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以不重置为null,那么一切正常(可能,因为效果似乎不确定)。

问题

我提出的代码是错误的。

  1. 我想知道我是否做错了什么。
  2. 我欢迎其他方式来实现我的需要。
  3. 对于Jave人

    • 泛型/类型注释:ox: Observable[X]表示Observable<X> ox
    • lambdas:x => null表示x -> null

1 个答案:

答案 0 :(得分:0)

我现在正在使用以下解决方案,该解决方案很简短,显然不会导致问题出现:

tr.withLatestFrom(ox)((_,x) => f(x)) merge problem.map(_ => null)