我正在研究 Angular RxJs 模式,但我不明白 BehaviorSubject
和 Observable
之间的区别。
据我了解,一个 BehaviorSubject
是一个可以随时间变化的值(可以订阅并且订阅者可以接收更新的结果)。这似乎与 Observable
的目的完全相同。
你什么时候会使用 Observable
和 BehaviorSubject
?在 BehaviorSubject
上使用 Observable
有什么好处,反之亦然?
原文由 Kevin Mark 发布,翻译遵循 CC BY-SA 4.0 许可协议
BehaviorSubject 是一种主题,主题是一种特殊类型的可观察对象,因此您可以像订阅任何其他可观察对象一样订阅消息。 BehaviorSubject 的独特之处在于:
它需要一个初始值,因为它必须始终在订阅时返回一个值,即使它没有收到
next()
订阅后,它返回主题的最后一个值。常规的 observable 仅在收到
onnext
时触发在任何时候,您都可以使用
getValue()
方法在不可观察的代码中检索主题的最后一个值。与可观察对象相比,对象的独特特征是:
此外,您可以使用 BehaviorSubject 上的
asObservable()
方法从BehaviorSubject
主题中获取可观察对象。Observable 是 Generic,而
BehaviorSubject
在技术上是 Observable 的子类型,因为 BehaviorSubject 是具有特定品质的 observable。BehaviorSubject 示例:
带有常规主题的示例 2:
可以使用
subject.asObservable()
从Subject
和BehaviorSubject
创建一个 observable。唯一的区别是您不能使用
next()
方法将值发送到可观察对象。在 Angular 服务中,我会将
BehaviorSubject
用于数据服务,因为 Angular 服务通常在组件之前初始化,并且行为主体确保使用该服务的组件接收到最后更新的数据,即使自组件订阅此数据以来没有新的更新也是如此。