Javascript 为什么“行为主体”没有';不发出最后一个值
声明无论我何时订阅,它都应返回最后发出的值,但它不会为我返回该值:Javascript 为什么“行为主体”没有';不发出最后一个值,javascript,rxjs,Javascript,Rxjs,声明无论我何时订阅,它都应返回最后发出的值,但它不会为我返回该值: const ofObservable = Rx.Observable.of(1, 2, 3); const subject = new Rx.BehaviorSubject(); ofObservable.subscribe(subject); subject.subscribe((v) => { console.log(v); }, null, () => { console.log('compl
const ofObservable = Rx.Observable.of(1, 2, 3);
const subject = new Rx.BehaviorSubject();
ofObservable.subscribe(subject);
subject.subscribe((v) => {
console.log(v);
}, null, () => {
console.log('completed');
});
代码仅记录完成的代码
ReplaySubject
与上面的代码和日志1,2,3,completed
一样工作。问题出在其他地方
当您使用OfOfObservable.subscribe(subject)时,源OfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfO
因此,本用例中的解决方案只能传递下一个信号:
ofObservable.subscribe(val => subject.next(val));
请参阅演示:谢谢,那么为什么ReplaySubject
可以工作呢?它不受源可观测对象发出的complete
的影响吗?并且使用您描述的方法,主体将永远不会完成,对吗?显然不会,事实上,ReplaySubject
不会订阅,但它会重放所有存储的值。你可以在这里看到。我认为这很有意义,因为ReplaySubject
应该真正重放整个项目序列,而BehaviorSubject
应该像基本Subject
类一样运行,但只能保证它始终发出至少一个项目。是的,如果只传递next
信号,它就不会完成。谢谢,但还是有点困惑。。。ReplaySubject重放所有内容并完成。我希望行为主体也能同样工作。但我理解其中的机制以及它们的不同之处。我需要用它们做更多的实验。