如何在订阅时获得观察者的“当前”价值

我在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类比,因为它在“解决”(即完成)之前不产生任何东西,并且随后总是将价值赋予任何订阅的人。