乐趣区

关于rxjs:Rxjs-里-Subject-和-BehaviorSubject-的区别

通过一个理论的例子来了解。

上面的代码,创立了一个新的 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 的原创文章,尽在:” 汪子熙 ”:

退出移动版