【问题标题】:Confusion around understanding the difference between Observable and Subject in RX对理解 RX 中的 Observable 和 Subject 之间的区别感到困惑
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2014-08-30
    • 2013-05-15
    • 2012-03-01
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多