混淆理解 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和完成事件)。 那么为什么在上面的代码中将主题考虑为观察者的角色?
非常感谢。
主题被认为在引用代码中扮演了观察者的角色,正是因为 onNext
和 onCompleted
被调用。 Observer
被定义为一个对象,您可以在其上调用 onNext
和 onCompleted
(以及 onError
。)
看了一大堆关于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和完成事件)。 那么为什么在上面的代码中将主题考虑为观察者的角色?
非常感谢。
主题被认为在引用代码中扮演了观察者的角色,正是因为 onNext
和 onCompleted
被调用。 Observer
被定义为一个对象,您可以在其上调用 onNext
和 onCompleted
(以及 onError
。)