您当前的位置:首页 > 计算机 > 编程开发 > JavaScript

Rx中的subject和scheduler怎么理解概念?

时间:01-04来源:作者:点击数:

Subject

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。

文档中也提到过,Subject 也是 Observable 对象,同时它还是一个 observer,最后是事件转发(proxy)器。具体解释一下:

一、Subject 有 subscribe 方法,所以它是一个 Observable:

var subject = new Rx.Subject();

subject.subscribe({
  next: (v) => console.log('observerA: ' + v)
});
subject.subscribe({
  next: (v) => console.log('observerB: ' + 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 环境中,可能会比多线程的环境稍微简单一点。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐