深入了解可观察对象的冷热特性
1. 可观察对象的冷热特性概述
可观察函数是一种惰性计算,这意味着包含可观察对象声明的整个操作符序列,直到有观察者订阅它时才会开始执行。但在订阅之前发生的所有事件会怎样呢?例如,鼠标移动可观察对象如何处理所有鼠标事件,或者接收到一组消息的 WebSocket 会如何处理这些消息?这些潜在的重要事件会消失吗?实际上,这些活跃的数据源不会等待订阅者开始监听才发出事件,因此了解如何处理这种情况至关重要。
可观察对象分为两种类型:热(hot)和冷(cold)。这是 RxJS 中比较复杂的概念,下面我们将详细探讨它们的区别、各自的优点,以及如何在代码中利用这些特性。
1.1 冷可观察对象
简单来说,冷可观察对象在有观察者订阅它之前不会开始发出所有值。冷可观察对象通常用于包装有界数据类型,如数字、数字范围、字符串、数组和 HTTP 请求,以及无界类型,如生成器函数。这些资源是被动的,因为它们的声明与执行是相互独立的,这也意味着这些可观察对象在创建和执行时是真正的惰性的。
每次新的订阅都会创建一个新的独立流,并且有一个新的起始点。这意味着订阅者总是会从开始独立地接收到完全相同的一组事件。可以将创建冷可观察对象看作是创建一个稍后要执行的计划或食谱,这个食谱只是一组告诉 JavaScript 运行时引擎如何组合和处理数据的指令(操作符),只有当你选择开始“烹饪”时,冷可观察对象才会开始发出事件。
从纯函数式编程(FP)的角度来看,冷可观察对象的行为很像函数。函数可以被看作是一个惰性或待计算的值,只有在需要时调用才会返回结果。同样,可观察对象在被订阅之前不会运行,你可以使用提供的观察者来处理它们的返回值。
超级会员免费看
订阅专栏 解锁全文
15

被折叠的 条评论
为什么被折叠?



