Rx Observable of state,当状态转换失败时

时间:2016-02-17 18:27:03

标签: rx-scala

给定基于前一个和传入事件无限生成新值的计算,这也可能失败,这是获得两个Observable的最佳方式:

  • 潜在无限,成功转型,
  • 是否有错误报告?

详细

我试图建模一个由ScalaFX GUI事件改变的状态,并且第一次尝试RXScala。简化事情:

trait State {
  def computeNext(basedOn: Any): State
}

sealed trait UserEvent // Has some case classes

class StateProcessor(initialState: State, events: Observable[UserEvent]) {
  ...
}

我们的想法是创建一个Observable[State],给定初始状态并根据事件更改为next。很简单:

val observableState = events.scan(initialState){(state, ev) =>
  // compute and return next state
  state computeNext ???
}

现在的问题实际上是计算下一个状态涉及I / O,并且可能会失败,因此computeNext必须返回Try [State]

trait State {
  def computeNext(basedOn: Any): Try[State]
}

显然,我不能再使用scan了。通常我希望有两个Observable s:

class StateProcessor(initialState: State, events: Observable[UserEvent]) {
  val observableState: Observable[State] = ???
  val observableExc: Observable[Exception] = ???
}

有规则,如果Try[State]失败,observableState根本不会发出任何内容,也不报告错误。下一个状态基于上次成功计算。

解决这种情况最优雅的方法是什么?

0 个答案:

没有答案