前面了解过Subject,BehaviorSubject
是subject
的变体,具有类似的多播功能,不同的是,BehaviorSubject
需要初始值,并且会在订阅时发出当前值。
一句话概括:Subject
只是多播,不保留状态,但是我们可以使用BehaviorSubject
来知道最后一个发出的值。
有时候我们需要一订阅就需要得到值,而不是当事件发生后才得到,那么这种情况就需要使用BehaviorSubject
操作符。
初始化
BehaviorSubject
在初始化的时候需要给一个默认的值:
1 | const behaviorSub = new BehaviorSubject(0); |
我们来添加一个订阅函数:
1 | behaviorSub.subscribe(data => { |
打开控制台,在订阅就会获得到值:0
。
发出新值
BehaviorSubject
是subject
的变种,BehaviorSubject
具有subject
的基本功能,我们可以使用next
方法发出新的值:
1 | behaviorSub.next(data); |
我们可以创建一个定时器不断的发出值,当发出到第十个的时候就终止:
1 | interval(1000).subscribe(data => { |
获得最新的值
BehaviorSubject
在发出新的值之后会保存这个新的值,我们可以通过getValue()
方法来随时获取到这个“最新的值”:
1 | behaviorSub.getValue(); |
和其他操作符的组合
在某种情况下,我们的页面需要等待多个Observable
获得一次最新的值后才开始其他逻辑,这时候我们需要combineLastes
操作符来合并这些Observable
。这时候BehaviorSubject
就派上用场了:
1 | combineLast([ |