头图

Rxjs 里 Subject 和 BehaviorSubject 的区别

JerryWang_汪子熙
English

通过一个实际的例子来理解。

下面的代码,创建了一个新的 subject,然后调用 next 方法,多播给其所有的监听者。

import { Subject } from 'rxjs';

const jerry = new Subject();

const subscription = jerry.subscribe((data) => console.log(data));

console.log('ok');
jerry.next(111);
jerry.next(222);

subscription.unsubscribe();
console.log('?');
jerry.next(333);

上文的例子,会打印 111,222

如果 Subject 在被订阅之前就开始多播(即下图第5行的 111),那么这些多播值,不会被开始多播之后的订阅者收到。如下图所示:订阅者只会打印其订阅 subject 之后收到的多播值 222:

使用 BehaviorSubject,就可以避免这个问题:即使订阅者订阅该 subject 之前,后者就开始调用 next 进行多播,这些多播值同样能够被订阅者接收到:

更多Jerry的原创文章,尽在:"汪子熙":

阅读 198

Jerry Wang的SAP技术专栏
SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使

Jerry 2007年从电子科技大学计算机专业硕士毕业后进入SAP成都研究院工作至今, SAP社区导师,SAP中国技术...

784 声望
1k 粉丝
0 条评论

Jerry 2007年从电子科技大学计算机专业硕士毕业后进入SAP成都研究院工作至今, SAP社区导师,SAP中国技术...

784 声望
1k 粉丝
文章目录
宣传栏