在RxScala中管理订阅的最佳做法是什么?

时间:2017-05-31 11:41:43

标签: scala rx-java rx-scala

我希望控制订阅的范围,即使存在异常,同时避免对我的订阅使用 var

在Rx / F#中我会这样做

use subscription = Observable.subscribe ...

并且在离开范围时会自动处理订阅。

Scala的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

我的解决方案是使用scala-arm,但我不确定是否有更好的方法。

我添加了从Subscription到Resource的隐式转换,并使用scala-arm中的托管资源机制,如下所示:

object ResourceImplicits {
  implicit val subscription2Resource = new Resource[Subscription] {
    override def close(s: Subscription): Unit = s.unsubscribe()  }
}

//...

for (s <- managed(obs.subscribe { n => println(s"n=$n")})) {
    // the subscription is alive in this scope
    // ...
}
//the subscription has been unsubscribed