使用 rxjs5 获取 BehaviorSubject 当前值的简单方法
Posted
技术标签:
【中文标题】使用 rxjs5 获取 BehaviorSubject 当前值的简单方法【英文标题】:Simple way to get the current value of a BehaviorSubject with rxjs5 【发布时间】:2016-12-11 14:14:54 【问题描述】:之前在 rxjs4 中有一个在 BehaviorSubject 中调用的方法:
getValue()
(doc here)。
rxjs5中不再存在此方法。
所以我发现获得 BehaviorSubject 值的唯一解决方案是:
let value;
myBehaviorSubject.take(1).subscribe( (e) => value = e );
这段代码同步运行(我不完全理解为什么,但确实如此......)并获取值。它可以工作,但没有getValue()
存在时那么干净:
let value = myBehaviorSubject.getValue();
为什么 getValue()
在 rxjs5 中被删除了,什么是解决这个问题的最干净的方法?
【问题讨论】:
BehaviorSubject
接口已被简化 - getter 仅称为 .value
。
@arturgrzesiak 我在当前文档中没有找到对此 .value 的任何引用:reactivex.io/rxjs/class/es6/…
文档可能不是最新的,但它仍然有效。也请看这里:reactivex.io/rxjs/test-file/spec-js/subjects/…
感谢您的指点!
@Clement 是正确的,这从未添加到文档中,因为它从未打算供消费者使用。任何升级到 6.5.0 的人都会发现它不再工作,因为它已被删除:github.com/ReactiveX/rxjs/issues/5085
【参考方案1】:
正如 cmets 中 artur grzesiak
所指出的,BehaviorSubject
接口已被清理,getter 现在只是 myBehaviorSubject.value
。
我只是想将其添加为答案,因为我几乎没有阅读原始问题的 cmets,并且会错过正确答案。
【讨论】:
"我只是想将其添加为答案,因为我几乎没有阅读原始问题的 cmets,并且会错过正确答案。" 如果担心的是你重复评论和it's not "your" answer,你总是可以community wiki it(虽然在31票,我理解利他主义是否减弱)。 在我看来,如果有人不理解答案的工作原理,那是 Artur 而不是 Tyson 该评论链接到关于的重大变化,与行为主题无关。 从 RxJS 6.5.4(并期待 7.x)开始,BehaviorSubjects 将支持.value
和 .getValue()
作为访问当前价值github.com/ReactiveX/rxjs/blob/6.x/src/internal/…
我提交了一份编辑以删除关于 BehaviorSubject
的 .value
被弃用的评论。正如@AdrianBrand 所说,github 讨论是关于of
而不是BehaviorSubject
。 .value
是并且将继续在BehaviorSubject
中得到支持【参考方案2】:
看一个行为主体的源代码
https://github.com/ReactiveX/rxjs/blob/master/src/internal/BehaviorSubject.ts
它仍然有一个 getValue 方法,它有一个只调用 getValue 的 value 属性,它在 RxJs5 中有。
这是一个使用 RxJs5 的 StackBlitz。
https://stackblitz.com/edit/typescript-gcbif4
所有谈论 6.5.0 中的重大变化的 cmets 都链接到 cmets 关于 observables 的非行为主题。
【讨论】:
以上是关于使用 rxjs5 获取 BehaviorSubject 当前值的简单方法的主要内容,如果未能解决你的问题,请参考以下文章
在 RxJS 5.0 中找不到“combineLatest”