BehaviorSubject与shareReplay(1)一样吗?

时间:2019-08-07 13:09:46

标签: rxjs

在这两个示例中,subject$的行为是否完全相同?

import { BehaviorSubject, Observable } from 'rxjs';

let source: Observable<number>;
let subject$: Observable<number>;

subject$ = new BehaviorSubject(0);

source.subscribe(x => {
  subject$.next(x);
});

import { Observable } from 'rxjs';
import { shareReplay, startWith } from 'rxjs/operators';

let source: Observable<number>;
let subject$: Observable<number>;

subject$ = source.pipe(
  startWith(0),
  shareReplay(1)
);

1 个答案:

答案 0 :(得分:1)

它们的重播行为是相同的,但是可以使用shareReplay而不是BehaviorSubject配置发射重播的次数。主要区别在于shareReplay是一个运算符,可以将其添加到管道中并将任何源流转换为重播值。 BehaviorSubject是仅重播值的类。