使用rxjs5获取BehaviorSubject的当前值的简单方法

69

RxJS4 中,BehaviorSubject 有一个叫做 getValue() 的方法 (文档在这里)。

RxJS5 中已经没有了这个方法。

因此,我找到的唯一解决方案是:

let value;
myBehaviorSubject.take(1).subscribe( (e) => value = e );

这段代码同步运行(我不完全理解为什么,但它确实这样…)并获得该值。它可以工作,但如果存在getValue(),它可能不如预期的干净:

let value = myBehaviorSubject.getValue();

为什么在rxjs5中移除了getValue()方法,以及解决这个问题的最佳方法是什么?

为什么在rxjs5中移除了getValue()方法,以及解决这个问题的最佳方法是什么?


41
BehaviorSubject 接口已经简化 - getter 方法现在被称为 .value - artur grzesiak
@arturgrzesiak,我在当前文档中没有找到任何关于.value的参考: http://reactivex.io/rxjs/class/es6/BehaviorSubject.js~BehaviorSubject.html - Clement
3
文档可能不是最新的,但仍然有效。在这里也可以看一下:http://reactivex.io/rxjs/test-file/spec-js/subjects/BehaviorSubject-spec.js.html#lineNumber47 - artur grzesiak
感谢您指出这个问题! - Clement
@Clement是正确的,这从未被添加到文档中,因为它从未打算供消费者使用。任何升级到6.5.0的人都会发现它不再起作用,因为它已被删除:https://github.com/ReactiveX/rxjs/issues/5085 - Jamie Barker
@JamieBarker 这是不正确的,你链接的讨论是关于 of 而不是 BehaviorSubject - Alfred
2个回答

105

正如评论中artur grzesiak所指出的那样,BehaviorSubject接口进行了清理,现在只需使用 myBehaviorSubject.value 获取器。

我想补充这个答案是因为我差点没有看到原来问题的评论,否则我可能会错过正确的答案。


3
我想把这个作为一个答案补充进来,因为我差点没有看到原问题下面的评论,如果没有看到正确答案就会错过。如果担心重复评论并且这不是“你”的答案,您可以将其设为社区wiki(尽管在31个投票后,我理解如果利他主义减少了)。 - ruffin
8
我觉得如果有人不理解答案是如何工作的,那应该是阿图尔而不是泰森。 - Simon_Weaver
6
那个评论链接到一个关于“of”的重大更改,与行为主题无关。 - Adrian Brand
6
从RxJS 6.5.4开始(并期待7.x版本),可以通过.value.getValue()BehaviorSubjects上访问当前值。https://github.com/ReactiveX/rxjs/blob/6.x/src/internal/BehaviorSubject.ts - Birches
1
我提交了一份编辑,以删除有关 BehaviorSubject.value 已被弃用的评论。正如 @AdrianBrand 所述,github 讨论是关于 of 而不是 BehaviorSubject.valueBehaviorSubject 中仍然受到支持,并将继续被支持。 - Alfred

8

我必须说,rxjs 是 JavaScript 发生的最好的事情。 - Fritz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接