如何获得"当前"订阅时观察者的价值

时间:2015-02-03 23:59:12

标签: javascript rxjs

我很难熟悉RxJs的一个特定部分:当您订阅Observable时,您只能订阅该Stream中的任何 future 事件。与Promises相比,如果承诺已经解决,无论何时拨打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>
&#13;
&#13;
&#13;

我希望在订阅之前看到&#34;&#34;和#34;订阅后#34;印刷,虽然对我来说是有意义的&#34;旧的价值&#34;会掉下来的。但似乎RxJs并没有这样做(只有&#34;在订阅后#34;打印出来)。我怎样才能得到我之后的结果?

1 个答案:

答案 0 :(得分:82)

Rx提供这两种行为(以及其他行为)。

可用different Rx Subjects可以让您探索可观察对象的不同表现方式:

  • Rx.Subject是最基本的即发即弃的变种 - 如果您在事件发生时没有订阅,那么您就不会看到它。

  • 使用new Rx.BehaviorSubject(undefined)代替Subject,您可以获得所寻找的行为,因为BehaviorSubject表示“可以更改的值”

  • 使用new Rx.ReplaySubject(5),您订阅后即可获得5个最新值

  • 使用new Rx.AsyncSubject(),在observable 完成之前您将什么也得不到,此时您将获得最终值(如果您再次订阅,则继续获取最终值) 。这是Promises的真正Rx模拟,因为它在“解析”(即完成)之前不产生任何东西,之后总是将值给任何订阅的人。