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重放所有内容并完成。我希望行为主体也能同样工作。但我理解其中的机制以及它们的不同之处。我需要用它们做更多的实验。