如何在订阅时获得观察者的“当前”价值
我在RxJs的某个特定部分上苦苦挣扎:当您订阅Observable时,您只订阅了该Stream中的任何未来事件。 与承诺相比,如果承诺已经解决,那么无论何时调用then()
,都将获得该值。
这是一个代码示例:
var subject = new Rx.Subject(); subject.onNext('old value'); subject.onNext('before subscription'); subject.subscribe(function(val) { document.write(val); }); subject.onNext('after subscription');
<script src="ajax/libs/rxjs/2.3.24/rx.all.js"></script>
我期望看到“订阅之前”和“订阅之后”都打印出来,尽pipe对我来说“旧价值”会下降是有道理的。 但似乎RxJs不这样工作(只有“订阅后”打印)。 我怎样才能得到我以后的结果?
Rx提供两种行为(以及其他行为)。
可用的不同的Rx主题可以让您探索可观察的行为的不同方式:
-
Rx.Subject
是最基本的防火Rx.Subject
– 如果事件发生时你没有订阅,那么你看不到它。 -
使用
new Rx.BehaviorSubject(undefined)
而不是Subject
,您会得到您正在查找的行为,因为BehaviorSubject
表示“可以更改的值” -
使用
new Rx.ReplaySubject(5)
,你会得到5个最新的价值,只要你订阅 -
使用
new Rx.AsyncSubject()
,直到observable 完成 ,你将得到最终的值(如果你再次订阅,继续得到最终的值new Rx.AsyncSubject()
,你将不会得到任何东西。 这是Promise真正的Rx类比,因为它在“解决”(即完成)之前不产生任何东西,并且随后总是将价值赋予任何订阅的人。