rxjs——subject和Observable的区别
2024-09-03 09:29:19
原创文章,转载请注明出处
理解
observable的每个订阅者之间,是独立的,完整的享受observable流动下来的数据的。
subject的订阅者之间,是共享一个留下来的数据的
举例
这里的clock$ 被订阅者被 observerA,observerB ,observerC 三个订阅者在不同的时间独自订阅。
对于三个订阅者,clock$ 都是从头重新完成的跑一遍。
let a=''
const clock$ = Rx.Observable.interval(1000).take(3);
const observerA = {
next(v) {
a+='--A执行了,'
console.log('A next: ' + v)
console.log(a)
}
}
const observerB = {
next(v) {
a+='--B执行了,'
console.log('B next: ' + v)
console.log(a)
}
}
const observerC = {
next(v) {
a+='--C执行了,'
console.log('C next: ' + v)
console.log(a)
}
}
clock$.subscribe(observerA) // a Observable execution
setTimeout(() => {
clock$.subscribe(observerB) // another new Observable execution
}, 7000)
setTimeout(() => {
clock$.subscribe(observerC) // another new Observable execution
}, 14000)
/*
A next: 0
--A执行了,
A next: 1
--A执行了,--A执行了,
A next: 2
--A执行了,--A执行了,--A执行了,
B next: 0
--A执行了,--A执行了,--A执行了,--B执行了,
B next: 1
--A执行了,--A执行了,--A执行了,--B执行了,--B执行了,
B next: 2
--A执行了,--A执行了,--A执行了,--B执行了,--B执行了,--B执行了,
C next: 0
--A执行了,--A执行了,--A执行了,--B执行了,--B执行了,--B执行了,--C执行了,
C next: 1
--A执行了,--A执行了,--A执行了,--B执行了,--B执行了,--B执行了,--C执行了,--C执行了,
C next: 2
--A执行了,--A执行了,--A执行了,--B执行了,--B执行了,--B执行了,--C执行了,--C执行了,--C执行了,
*/
对于subject则不同
observerA,observerB ,observerC 三个订阅者在不同的时间订阅同一个subject。
他们三个在时间上是共享一个subject。
subject产生数据时,你这个订阅者如果没来得及订阅,那对不起,过了这个村就没这个店,你错过了。
const { Observable, Subject } = Rx
const clock$ = Observable.interval(1000).take(3);
const observerA = {
next(v) {
console.log('A next: ' + v)
}
}
const observerB = {
next(v) {
console.log('B next: ' + v)
}
}
const subject = new Subject()
subject.subscribe(observerA)
clock$.subscribe(subject)
setTimeout(() => {
subject.subscribe(observerB)
}, 2000)
/*
* A next: 0
* A next: 1
* A next: 2
* B next: 2
*/
最新文章
- 谨慎使用Marker Interface
- 小尝试一下 cocos2d
- js打印html中的内容
- leetcode 100 Same Tree ----- java
- UML 小结(2)- 理论理解
- SQL Server 查看identity值的几种方法。
- tolua 有些功能可以用(经过测试)
- 记忆化搜索 dp学习~2
- JVM学习八:常用JVM配置参数
- css块居中
- 安装mysql时出现应用程序无法正常启动(0xc000007b)
- struts建立工程helloworld
- 牛客多校第二场 G transform
- centos7 安装cmake
- python(58):python下划线
- CentOS 7 firewalld
- bzoj 2726 [SDOI2012]任务安排(斜率DP+CDQ分治)
- 预防U盘被病毒侵害的方法
- 解决python中write()函数向文件中写中文时出现乱码的问题
- iOS开发-项目的完整重命名方法,图文教程。
热门文章
- asp.net core-13.Cookie-based认证实现
- asp.net core-5.控制台读取json文件
- 红帽linux系统开机自启动脚本。
- css 清除浮动 &; BFC
- [Vue]axios 发出请求的config
- (八)mybatis之多对多
- 在textarea和input光标处插入内容,支持ie
- 微信小程序 上传图片并等比列压缩到指定大小
- CVE-2019-0214: Apache Archiva arbitrary file write and delete on the server
- 1.NIO概述