我很难熟悉RxJs的一个特定部分:当你订阅一个Observable时,你只能订阅来自该Stream的任何未来事件.与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');Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.3.24/rx.all.js"></script>Run Code Online (Sandbox Code Playgroud)
我希望看到"订阅前"和"订阅后"都打印出来,虽然我认为"旧价值"会被取消.但似乎RxJs不会那样工作(仅在"订阅后"打印).我怎样才能得到我追求的结果?
Bra*_*don 82
Rx提供两种行为(以及其他行为).
可用的不同Rx主题可以让您探索可观察者可以表现的不同方式:
这Rx.Subject是最基本的即发即弃的变种 - 如果你在事件发生时没有订阅,那么你就看不到了.
使用new Rx.BehaviorSubject(undefined)而不是Subject和你得到你正在寻找的行为,因为a BehaviorSubject代表一个"可以改变的价值"
使用new Rx.ReplaySubject(5),您会在订阅后立即获得5个最新值
使用new Rx.AsyncSubject()并且在observable 完成之前您将得不到任何结果,此时您将获得最终值(如果您再次订阅,则继续获得最终值).这是Promises的真正Rx模拟,因为它在"解析"(即完成)之前不会产生任何结果,之后总是会给订阅的任何人提供价值.