gpt4 book ai didi

scala - RXScala 中的热和冷 observables 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 18:40:12 24 4
gpt4 key购买 nike

我知道热和冷 observables 之间的区别是 previously discussed on Stack Overflow在 C# 的上下文中,但是我根本不了解 C#,也不了解 Lee Campbell 所指的代码示例。

我在 Scala 工作,使用 RXScala 库。什么是 Scala 中的热和冷 observables,它们是如何使用 RXScala 实现的?

最佳答案

冷观测

冷 observables 是在订阅时开始产生值的 observables。

被动并根据请求开始发布的流。

一些例子:

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 时,此流的订阅者将立即获得一个值,即已登录的用户。上次触发了。还有连续更新。

温暖的观察者
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 次点击,并在此后继续发出点击。

关于scala - RXScala 中的热和冷 observables 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28021313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com