我是反应堆和rxscala的新手,可以像这样创建一个Observable
:
val observable = Observable[String] { subscriber =>
subscriber.onNext("something")
}
我可以将新字符串添加到subscriber
内的Observable.apply
。
是否可以在外面更新observable
?我的意思是,有没有像putNext
这样的方法:
observable.putNext("another string")
让我把新东西放到现有的可观察物上?
答案 0 :(得分:2)
如果要手动控制Observable,则需要使用Subject。
主题是一种桥接器或代理,在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)
}