【发布时间】:2020-04-05 02:50:26
【问题描述】:
看了大量关于stackoverflow的帖子,我还是很困惑Rx中Observable和Subject的区别。
基本上,大多数人指出两者之间的主要区别在于“Subject 类同时继承了 Observable 和 Observer,在某种意义上它既是观察者又是可观察者”,并且可以通过以下代码sn-p来演示:
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
我了解,在以下代码部分中,主题是可以订阅的 observable 的角色:
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
看起来这里它表明主体也可以是观察者的角色,但我的理解是这里的主体也在提供值/事件(发送 1、2 和完整事件)。 那么为什么主体在上面的代码中被认为是观察者的角色?
非常感谢。
【问题讨论】:
-
主体可以被其他人消费(可观察),也可以作为发射器(观察者)。当它用于发出事件时,它的角色是观察者
-
在您提供的代码中,主题仅充当
Observable。如果将它传递给subscribe函数,它可以用作Observer。例如:interval(1000).subscribe(subject) -
@FanCheung 我虽然它是发出事件的可观察对象?为什么观察者也可以发出事件?你能详细说明一下吗? :)
-
或许你可以先看看这里:stackoverflow.com/questions/47537934/…
-
@FanCheung 这个链接很有帮助。谢谢
标签: rxjs rx-swift reactivex frp