Angular RxJS Subject主体

Posted Kabukiyo Lin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular RxJS Subject主体相关的知识,希望对你有一定的参考价值。

Subject与Observable的区别

  1. Subject是多播的,可以把值推送给多个观察者;Observable是单播的。
  2. Subject既可以做可观察对象,又可以做观察者

Subject作可观察对象

// 创建subject
var subject = new Rx.Subject();

//为subject注册两个观察者observerA、observerB
subject.subscribe({
  next: (v) => console.log('observerA: ' + v)
});
subject.subscribe({
  next: (v) => console.log('observerB: ' + v)
});

//subject作为可观察对象,为两个观察者播数据;
//第一次播报,给A和B发送1;
//第二次播报,给A和B发送2
subject.next(1);
subject.next(2);

// observerA: 1;
// observerB: 1;
// observerA: 2;
// observerB:  2;

也可以这么写

// 创建subject
var subject = new Rx.Subject();

//定义两个观察者A和B
const observerA = {
	next: (v) => console.log('observerA: ' + v);
}
const observerB = {
	next: (v) => console.log('observerB: ' + v);
}
//为subject注册两个观察者observerA、observerB
subject.subscribe(observerA);
subject.subscribe(observerB);

//subject作为可观察对象,为两个观察者播数据;
//第一次播报,给A和B发送1;
//第二次播报,给A和B发送2
subject.next(1);
subject.next(2);

Subject作观察者

把subject当作观察者,那它也可以作观察者订阅observable。

observable.subscribe(subject);
var observable = Rx.Observable.from([1, 2, 3]);
var subject = new Rx.Subject();

//定义两个观察者A和B
const observerA = {
	next: (v) => console.log('observerA: ' + v);
}
const observerB = {
	next: (v) => console.log('observerB: ' + v);
}
//为subject注册两个观察者observerA、observerB
subject.subscribe(observerA);
subject.subscribe(observerB);

observable.subscribe(subject); // 你可以提供一个 Subject 进行订阅

以上是关于Angular RxJS Subject主体的主要内容,如果未能解决你的问题,请参考以下文章

Angular和Rxjs:写入单元测试以过滤Subject

Angular RXJS Observables或Subjects在内部传递数字

Angular中利用rxjs库的Subject多播解决在第一次订阅时进行初始化操作(如第一次订阅时从服务器获取数据)

Angular RxJs:针对异步数据流编程工具

找不到模块 'rxjs/subject/BehaviorSubject'

rxjs Subject.create 已弃用-我应该改用啥?