文章目录
普通的 Observable 是单播的(每个订阅的 Observer 都拥有 Observable 的独立执行)
Subject是一种特殊类型的 Observable,允许将值多播到多个 Observer。
Subjects 就像 EventEmitters:它们维护着许多监听器的注册表。
- 每个 Subject 都是 Observable。
给定一个 Subject,你可以 subscribe 它,提供一个 Observer,它将开始正常接收值。
从 Observer 的角度来看,它无法判断 Observable 的执行是来自普通的单播 Observable 还是来自 Subject。 - 每个 Subject 也都是 Observer。
是一个具有方法 next(v)、error(e) 和 complete() 的对象。
要为 Subject 提供一个新值,只需调用 next(theValue),它将被多播到注册进来监听 Subject 的 Observer。
(由于 Subject 是 Observer,这也意味着你可以提供 Subject 作为任意 Observable subscribe 的参数)
import {
Subject, from } from 'rxjs';
const subject = new Subject<number>();
subject.subscribe({
next: (v) => console.log(`observerA: ${
v}`),});
subject.subscribe({
next: (v) => console.log(`observerB: ${
v}`),});
const observable = from([1, 2, 3]);
observable.subscribe(subject); // You can subscribe providing a Subject
// Logs:
// observerA: 1
// observerB: 1
// observerA: 2
// observerB: 2
// observerA: 3
// observerB: 3
- Subject 类型还有一些特化: BehaviorSubject、ReplaySubject 和 AsyncSubject。
多播 Observables (Multicasted Observables)
多播的 Observable 在底层使用 Subject 来让多个 Observer 看到相同的 Observable 执行过程。
- e.g. multicast
import {
from, Subject, multicast } from 'rxjs';
const source =