以下示例来自我目前正在阅读的有关Observables的书籍之一:
object ObservablesCreate extends App {
val vms = Observable.create[String] { obs =>
 obs.onNext("JVM")
obs.onNext("DartVM")
obs.onNext("V8")
obs.onCompleted()
Subscription()
}
vms.subscribe(log _, e => log(s"oops - $e"), () => log("Done!"))
}
下面的文字暗示上面的代码片段有一个非常容易理解的同步订阅方法。我的问题是,这不是使用Observables进行异步事件发送的全部目的吗?我的意思是这里与Iterable没有区别。这是为了解释一下来解释的吗?
答案 0 :(得分:1)
是的,这只是为了解释create
工厂方法。在订阅代码中,您将在订阅者订阅时同步生成元素。
但以同样的方式,您可以异步调用onNext
,例如当Future
结算时:
object ObservablesCreate extends App {
def future: Future[String] = ???
val vms = Observable.create[String] { obs =>
val f = future
f onComplete {
case Success(s) => {
obs.onNext(s)
obs.onCompleted()
}
case Failure(exception) => obs.onError(exception)
}
Subscription()
}
vms.subscribe(log _, e => log(s"oops - $e"), () => log("Done!"))
}
(对于这种特定情况,使用Observable.from
方法将Future
转换为Observable
)