我很难熟悉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;
我希望在订阅之前看到&#34;&#34;和#34;订阅后#34;印刷,虽然对我来说是有意义的&#34;旧的价值&#34;会掉下来的。但似乎RxJs并没有这样做(只有&#34;在订阅后#34;打印出来)。我怎样才能得到我之后的结果?
答案 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模拟,因为它在“解析”(即完成)之前不产生任何东西,之后总是将值给任何订阅的人。