示例:
import { BehaviorSubject } from 'rxjs';
import { share } from 'rxjs/operators';
const subject = new BehaviorSubject(123);
const obs = subject.asObservable().pipe(share());
obs.subscribe(console.log);
obs.subscribe(console.log);
obs.subscribe(console.log);
obs.subscribe(console.log);
我只有一个控制台日志,但是如果将其更改为shareReplay,它将调用所有订阅。
https://stackblitz.com/edit/rxjs-behaviorsubject-simpleexample-tr3fu5?file=index.ts
答案 0 :(得分:2)
您为什么转换为可观察的?
一个主题已经在多播。
如果您只订阅subject
怎么办?
import { BehaviorSubject } from 'rxjs';
const subject = new BehaviorSubject(123);
subject.subscribe(console.log);
subject.subscribe(console.log);
subject.subscribe(console.log);
subject.subscribe(console.log);
这句话
什么是主题? RxJS主题是一种特殊的Observable类型,它允许将值多播到许多Observer。普通的Observable是单播的(每个订阅的Observer拥有Observable的独立执行),而Subject是多播的。
更新
此代码有效
import { BehaviorSubject } from 'rxjs';
import { share } from 'rxjs/operators';
const subject = new BehaviorSubject(null);
const obs = subject.asObservable().pipe(share());
//two new subscribers will get initial value => output: 123, 123
obs.subscribe(console.log);
obs.subscribe(console.log);
obs.subscribe(console.log);
obs.subscribe(console.log);
subject.next(1)
subject.next(2)
subject.next(3)
subject.next(4)