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

我在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="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.3.24/rx.all.js"></script> 

我期望看到“订阅之前”和“订阅之后”都打印出来,尽pipe对我来说“旧价值”会下降是有道理的。 但似乎RxJs不这样工作(只有“订阅后”打印)。 我怎样才能得到我以后的结果?

One Solution collect form web for “如何在订阅时获得观察者的“当前”价值”

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

  • 什么是“回拨地狱”以及RX如何解决这个问题?
  • Observabletypes错误:无法读取undefined的属性
  • RxJS中的“Scheduler”是什么?
  • 如何获得RxJS Subject或Observable的当前值?
  • 如何在Angular2中取消订阅
  • 如何在rxjs中返回一个空的observable
  • Angular 2 HTTP GET与TypeScript错误http.get(...).map不是中的函数
  • Angular2 http.get(),map(),subscribe()和可观察模式 - 基本理解
  • Node.js数据stream与观测数据
  • Knockout.js和Rx.js有什么区别?
  • 什么是不同的RxJS主题的​​语义?