[英]What is the difference between hot and cold observables in RXScala?
我知道熱和冷可觀察量之間的區別之前已經在C#的上下文中討論了Stack Overflow ,但我根本不了解C#並且不理解Lee Campbell所指的代碼示例。
我在Scala工作,使用RXScala庫。 什么是Scala中的冷熱可觀測量,以及它們如何使用RXScala實現?
冷可觀察性是可觀察的,在訂閱時開始產生價值。
被動的流並根據請求開始發布。
一些例子:
import rx.lang.scala._
import org.joda.time._
val onetwothree = Observable.just(1, 2, 3) // when subscribed each subscriber will get 1, 2, and 3
// scala> onetwothree.subscribe(println(_))
// 1
// 2
// 3
// res1: rx.lang.scala.Subscription = rx.lang.scala.Subscription$$anon$2@11be372a
// When subscribed will get one event with current DateTime
val currentTime = Observable.defer {
Observable.just(DateTime.now)
}
// scala> currentTime.subscribe(println(_))
// 2015-01-19T14:13:37.333+02:00
// scala> currentTime.subscribe(println(_))
// 2015-01-19T14:13:38.742+02:00
// scala> currentTime.subscribe(println(_))
// 2015-01-19T14:13:40.448+02:00
// And this one is tricky.
val loggedInUsers = Obserable.defer {
fetchLoggedUsersFromDb
}
無論訂閱如何,都處於活動狀態並發布的流。
自然的例子來自UI編程:鼠標點擊流。 無論是否訂閱了流,都會產生點擊。
在許多應用程序中, loggedInUsers
被稱為溫暖可觀察的東西:
val loggedInUsers = updateTriggers.concatMap { _ =>
fetchLoggedUsersFromDb
}.replay(1)
當上次觸發updateTriggers
時,此流的subriber將立即獲得一個值,即已記錄的用戶。 還有連續的更新。
val hot = mouseClicks
// Observable that will replay all of its items and notifications to any future Observer
// i.e. all mouseClicks from the time point we called `.replay`
val cold = hot.replay
但是之間有一些東西:
// Observable that will replay at most 10 items emitted by `hot`
val warm = hot.replay(10)
當我們訂閱warm
它會立即發出最后10次點擊,並在此之后繼續發出點擊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.