合并一个采样Observable时的问题



我使用的是rx-scala,它是rx-java的子项目。我将使用Scala语法,希望大家都能理解。

我遇到了奇怪的行为,我不知道这是一个错误还是错误地使用了rx操作符。

问题陈述

我有一个ox: Observable[X]和一个触发可观察的tr: Observable[()]。我想要一个可观察的oy,它是使用函数f: Function[X,Y]ox的转换,但仅在触发时,因为f可能是昂贵的。

如果ox的最后一个值没有转换值,那么oy应该是null

一些备注:

  • ox是热的,因为它是UI事件的结果。
  • ox行为正确(值和定时),因为我检查了println调试。
  • oy在正确的时间点火;它只是使用过时的ox值,当它是非空值时。

当前代码
oy = ox.sample(tr).map(f).merge(ox.map(x => null))

上面代码的问题是:它最初工作,但过了一段时间,当触发tr时,oyf应用于ox的旧值。当不改变ox时,如果我重复触发tr,结果会更新并最终赶上。

如果我删除merge以不重置为null,那么一切都工作正常(可能,因为效果似乎不确定)。

我的代码有bug。

    我想知道我是否做错了什么。
  1. 我欢迎实现我需要的其他方式。

For the Jave people

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

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

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

相关内容

  • 没有找到相关文章

最新更新