Kon*_*ten 1 rxjs subject-observer behaviorsubject angular
根据Subject 的文档,这是Observable的一个特例,它让所有观察者共享一个共同的执行路径。该示例显示每个观察者在订阅源后获得相同的发射值。
我并不完全清楚它与计划Observable发射值的情况有何不同。多个订阅者中的每一个都将收到每个下一个ed 值。在相应订阅之前发出的值不会被传递(除非我们在某些shareReply中明确地使用管道“ed ”)。
使Subject成为Observable的特例的实际区别是什么?我错过了明显的,可能。
根据定义,可观察对象是数据生产者。
另一方面,主体可以同时充当数据生产者和数据消费者。
这意味着两件事。
话虽如此,主题和可观察对象之间存在一个关键区别。
一个主题的所有订阅者共享该主题的相同执行。即当一个主体产生数据时,它的所有订阅者将收到相同的数据。这种行为与 observable 不同,其中每个订阅都会导致 observable 的独立执行。
例子:
// Here a subject is acting like a data producer
const subject = new Subject();
const subjObserv = subject.asObservable();
subjObserv.subscribe((data: number) => console.log("subect A " + data));
for (let i = 1; i <= 5; i++) subject.next(i);
subjObserv.subscribe((data: number) => console.log("subect B " + data));
subject.next(6);
// simple observer
const plainObs = Observable.of([1, 2, 3, 4, 5]);
plainObs.subscribe(data => console.log("plain onservable A " + data));
plainObs.subscribe(data => console.log("plain onservable B " + data));
Run Code Online (Sandbox Code Playgroud)
输出:
subect A 1
subect A 2
subect A 3
subect A 4
subect A 5
subect A 6
subect B 6
plain onservable A 1,2,3,4,5
plain onservable B 1,2,3,4,5
Run Code Online (Sandbox Code Playgroud)
正如您所注意到的,我们获得的输出与订阅的次数一样多,plainObs但是subjObserv我们获得的输出是在订阅后发出的。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |