混淆理解 RX 中 Observable 和 Subject 之间的区别

Confusion around understanding the difference between Observable and Subject in RX

看了一大堆关于stack overflow的帖子,对Rx中Observable和Subject的区别还是很困惑

基本上,大多数人指出两者之间的主要区别在于“Subject class 继承了 Observable 和 Observer,在某种意义上它既是观察者又是观察者observable”,可以用下面的代码片段来演示:

var subject = new Rx.Subject();

var subscription = subject.subscribe(
function (x) { console.log('onNext: ' + x); },
function (e) { console.log('onError: ' + e.message); },
function () { console.log('onCompleted'); }
);

subject.onNext(1);
// => onNext: 1

subject.onNext(2);
// => onNext: 2

subject.onCompleted();
// => onCompleted

我了解到在代码的以下部分中,主题是可以订阅的可观察对象的角色:

var subscription = subject.subscribe(
function (x) { console.log('onNext: ' + x); },
function (e) { console.log('onError: ' + e.message); },
function () { console.log('onCompleted'); }
);

真正让我困惑的是这部分:

subject.onNext(1);
// => onNext: 1

subject.onNext(2);
// => onNext: 2

subject.onCompleted();
// => onCompleted

这里好像说明了subject也可以是观察者的角色,但我的理解是这里subject也在喂values/events(发送1、2和完成事件)。 那么为什么在上面的代码中将主题考虑为观察者的角色

非常感谢。

主题被认为在引用代码中扮演了观察者的角色,正是因为 onNextonCompleted 被调用。 Observer 被定义为一个对象,您可以在其上调用 onNextonCompleted(以及 onError。)