概述
今天来学习一下RxJS中的Subject
,有人说它既是Observable
,又是Observer
,那么它到底是什么呢?先来看一下官方的定义:
1 | Subject is equivalent to an EventEmitter, and the only way of multicasting a value or event to multiple Observers. |
翻译一下:Subject等价于EventEmitter,是唯一一种将值或事件多播给多个观察者的方法。
Subject的特点
多播
下面的代码中,有两个订阅者,但是他们共享数据流,所以他们会输出相同的随机数。这就是Subject的多播特性。
1 | import { Subject } from 'rxjs'; |
但是如果改用observable, 那么每个订阅者都会收到一份数据,以下代码打印出不同的随机数。也就是说:对于普通的observable,每次订阅都会发起新的请求。一次订阅只能有一个观察者。
1 | import { Observable } from 'rxjs'; |
总结
特性 | Observable | Subject |
---|---|---|
单播多播 | 单播 | 多播 |
数据产生时机 | 订阅时产生 | 由Subject.next()产生 |
冷热 | 冷 | 热 |
是否是Observer | 否 | 是 |
订阅时机的影响 | 每次订阅后产生新的数据 | 共享数据流,订阅后接收续生成的数据 |