如何手动更新observable?

时间:2015-11-11 14:40:23

标签: scala reactive-programming observable subscriber rx-scala

我是反应堆和rxscala的新手,可以像这样创建一个Observable

val observable = Observable[String] { subscriber => 
    subscriber.onNext("something")
}

我可以将新字符串添加到subscriber内的Observable.apply

是否可以在外面更新observable?我的意思是,有没有像putNext这样的方法:

observable.putNext("another string")

让我把新东西放到现有的可观察物上?

1 个答案:

答案 0 :(得分:2)

如果要手动控制Observable,则需要使用Subject。

根据ReactiveX documentation

  

主题是一种桥接器或代理,在ReactiveX的某些实现中可用,它既充当观察者又充当Observable。因为它是一个观察者,它可以订阅一个或多个Observable,并且因为它是一个Observable,它可以通过重新发送它来传递它观察到的项目,并且它也可以发出新项目。

您可以订阅主题,但您也可以向其传递新元素,实际上是手动控制它,这就是您所要求的。

示例:

def getById(id: String)(implicit ec: ExecutionContext): Future[Option[SomeModel]]={
      Try(this.get(BSONDocument("_id" -> BSONObjectID(id)))).recover{ case t => Future.failed(t) }.get
  }

def get(query: BSONDocument)(implicit ec: ExecutionContext): Future[Option[SomeModel]]={
      collection.find(query).one[SomeModel](ReadPreference.Primary)
  }