我在研究RxJs的Angular 模式,我不明白BehaviorSubject
和Observable
之间的区别.
据我所知,BehaviorSubject
是一个可以随时间变化的值(可以订阅,订阅者可以收到更新的结果).这似乎与Observable
的目的完全相同.
你什么时候会用Observable
比BehaviorSubject
?使用BehaviorSubject
比Observable
有好处吗?反之亦然?
我在研究RxJs的Angular 模式,我不明白BehaviorSubject
和Observable
之间的区别.
据我所知,BehaviorSubject
是一个可以随时间变化的值(可以订阅,订阅者可以收到更新的结果).这似乎与Observable
的目的完全相同.
你什么时候会用Observable
比BehaviorSubject
?使用BehaviorSubject
比Observable
有好处吗?反之亦然?
BehaviorSubject是一种主题,主题是一种特殊类型的可观察对象,所以你可以像其他任何可观察对象一样订阅消息.行为主体的独特特征是:
next()
onnext
getValue()
方法检索不可见代码中主题的最后一个值.与可观察对象相比,对象的独特特征包括:
此外,您可以使用BehaviorSubject
上的asObservable()
方法从行为主体获得一个可观察值.
Observable是泛型,而BehaviorSubject
从技术上讲是可观察对象的子类型,因为BehaviorSubject是具有特定属性的可观察对象.
以BehaviorSubject为例:
// Behavior Subject
// a is an initial value. if there is a subscription
// after this, it would get "a" value immediately
let bSubject = new BehaviorSubject("a");
bSubject.next("b");
bSubject.subscribe(value => {
console.log("Subscription got", value); // Subscription got b,
// ^ This would not happen
// for a generic observable
// or generic subject by default
});
bSubject.next("c"); // Subscription got c
bSubject.next("d"); // Subscription got d
例2常规主题:
// Regular Subject
let subject = new Subject();
subject.next("b");
subject.subscribe(value => {
console.log("Subscription got", value); // Subscription wont get
// anything at this point
});
subject.next("c"); // Subscription got c
subject.next("d"); // Subscription got d
可以使用subject.asObservable()
从Subject
和BehaviorSubject
两者创建可观测对象.
唯一的区别是您不能使用next()
方法将值发送到可观察对象.
在Angular services中,我将使用BehaviorSubject
作为数据服务,因为Angular service通常在组件和行为主体之前进行初始化,以确保使用该服务的组件接收到最后更新的数据,即使组件订阅该数据后没有新的更新.