RxJS笔记(四)Subject主体


普通的 Observable 是单播的(每个订阅的 Observer 都拥有 Observable 的独立执行)

Subject是一种特殊类型的 Observable,允许将值多播到多个 Observer

Subjects 就像 EventEmitters:它们维护着许多监听器的注册表。

  1. 每个 Subject 都是 Observable。
    给定一个 Subject,你可以 subscribe 它,提供一个 Observer,它将开始正常接收值。
    从 Observer 的角度来看,它无法判断 Observable 的执行是来自普通的单播 Observable 还是来自 Subject。
  2. 每个 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 = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值