Subject VS BehaviorSubject
BehaviorSubject & ReplaySubject & AsyncSubject
Type | 每个订阅者能收到的值 | 创建 |
---|---|---|
Subject | 订阅后的值 (values) | new Subject() |
BehaviorSubject | 订阅前的值 (value) 以及订阅后的值 (values) | new BehaviorSubject(VALUE) |
ReplaySubject | 订阅前后所有的值 (values) | new ReplaySubject() |
AsyncSubject | 结束(complete) 前的值 (value) | new AsyncSubject() |
- Subject
const subject$ = new Subject<string>();
subject$.next('Before - 1');
subject$.subscribe(
x => console.log('Subject:', x),
err => console.log('Error: ', err),
() => console.log('Complete!')
);
subject$.next('After - 2');
subject$.next('After - 3');
subject$.error('0');
subject$.complete();
// Subject: After - 2
// Subject: After - 3
// Error: 0
- BehaviorSubject
const behaviorSubject$ = new BehaviorSubject<string>('Before - 1');
behaviorSubject$.subscribe(x => console.log('BehaviorSubject:', x));
behaviorSubject$.next('After - 2');
behaviorSubject$.next('After - 3');
// BehaviorSubject: Before - 1
// BehaviorSubject: After - 2
// BehaviorSubject: After - 3
const behaviorSubject$ = new BehaviorSubject<string>('Before - 1');
behaviorSubject$.next('Before - 2');
behaviorSubject$.subscribe(x => console.log('BehaviorSubject:', x));
behaviorSubject$.next('After - 3');
behaviorSubject$.next('After - 4');
// BehaviorSubject: Before - 2
// BehaviorSubject: After - 3
// BehaviorSubject: After - 4
Subject & Observable & Observer
Observable | Subject | Observer |
---|---|---|
subscribe() | subscribe() | – |
– | next(); error(); complete(); | next(); error(); complete(); |
– | observers[] | – |