Rx中的subject和scheduler咋理解概念

Subject我觉得 @timliu 说得没错,文档中也提到过,Subject 也是 Observable 对象,同时它还是一个 observer,最后是事件转发(proxy)器。具体解释一下:一、Subject 有 subscribe 方法,所以它是一个 Observable:var subject = new Rx.Subject();subject.subscribe({ next: (v) =\u0026gt; console.log(\u0026#39;observerA: \u0026#39; + v)});subject.subscribe({ next: (v) =\u0026gt; console.log(\u0026#39;observerB: \u0026#39; + v)});subject.next(1);subject.next(2);所以 Subject 可以理解为 Producer 函数为空的 Observable 。二、Subject 可以作为别的 Observable 的 subscribe 方法的参数,所以它也是一个 observer,因为 subscribe 接收的就是一个 observer,就像这样:source.subscribe(subject)并且它具有 next 方法,更印证了它是一个 observer :subject.next(2);三、在所谓的 multicasted(多播)场景中,Subject 不仅是一个 observer ,它还负责把它订阅收到的值转发给它的子 observers,这样一来这些 observers 就相当于订阅了同一个 Subscription 对象,而不是执行多次 Producer 函数、产生多个不同的 Subscription。在这种场景下,Subject 就是一个事件的 proxy。如果希望给 Subject 对象设置一个默认值,那就用 BehaviorSubject,如果希望每个历史的值都触发一遍 subscribe 回调函数,那就用 ReplaySubject,都是 Subject 的变种。Scheduler目前只理解到,它同样是一个复合的概念。可以用它来决定上下文,从而影响代码的执行机制。在 JS 环境中,可能会比多线程的环境稍微简单一点。等我用到了再来补充了。如有错误请见笑。
■网友
Subject是一个Observable,因为它有subscribe方法;Subject又是一个Observer,因为它有next方法。它维护一个observers列表,当运行subject.subscribe(observerX)的时候,这个observerX就被加到列表里,unsubscribe时从列表中删掉。Subject像是一个proxy,外部调用subject.next(value)时,这个value会被forEach给Subject的observers。 Scheduler 我就说不清楚了,一是因为我在实践中没用过,另外我只认识 Javascript。我觉得要明白 Scheduler,在 Javascript 的 context 下面,首先要明白 event loop。广告:我的RxJS学习心得《白话RxJS》(专栏),欢迎阅读。
■网友
可以这样理解:Subject和Observable是一类:发出事件者、可观察的对象、事件源等。Scheduler是指处理事件的线程,比如http://Schedulers.io() IO线程, AndroidSchedulers.mainThread() Android主线程等


    推荐阅读