rxjs——subject和Observable的区别
原创文章,转载请注明出处
理解
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
*/
rxjs——subject和Observable的区别的更多相关文章
- [RxJS] Subject: an Observable and Observer hybrid
This lesson teaches you how a Subject is simply a hybrid of Observable and Observer which can act as ...
- RxJS - Subject(转)
Observer Pattern 观察者模式定义 观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态 ...
- import { Subject } from 'rxjs/Subject';
shared-service.ts import { Observable } from 'rxjs/Observable'; import { Injectable } from '@angular ...
- [RxJS] Subject basic
A Subject is a type that implements both Observer and Observable types. As an Observer, it can subsc ...
- [Javascript + rxjs] Introducing the Observable
In this lesson we will get introduced to the Observable type. An Observable is a collection that arr ...
- [RxJS] Subject asObservable() method
You can create your own state store, not using any state management libraray. You might have seen th ...
- 九、Rxjs请求对Observable进行封装
1.引入 Http.Jsonp.Rxjs 三个模块 2.请求中添加一个 .map(res => res.json) 问题 1.Property 'map' does not exist on t ...
- rxjs简单的Observable用例
import React from 'react'; import { Observable } from 'rxjs'; const FlowPage = () => { const onSu ...
- [rxjs] Creating An Observable with RxJS
Create an observable var Observable = Rx.Observable; var source = Observable.create(function(observe ...
随机推荐
- asp.net core-15.Individual authentication 模板
在visual studio code执行dotnet new mvc --help 可以查看执行命令 visual studio code先创建一个mvc的项目 dotnet new mvc -au ...
- 给初学PHP的学习线路和建议
直入主题 1.熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作简单的网页,对元素属性相对熟悉. 2.理解动态语言的概念和运做机制,熟悉基本的PHP语法. 3.学习如何将PHP与HTML结 ...
- 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)
原文:监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1) 如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面 ...
- Ajax中解析Json的两种方法
eval(); //此方法不推荐 JSON.parse(); //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name" ...
- sql语句查询结果中添加自增列
SELECT Row_Number() over ( order by getdate() ) as init , * FROM 表名
- kafka连接storm问题
遇到缺少jar包的报错,参考https://www.jianshu.com/p/70c3a7f56386 参考上面的链接把jar包都放到storm/lib目录下后,使用localCluster的方法提 ...
- Java基于Redis的分布式锁
分布式锁,其实最终还是要保证锁(数据)的一致性,说到数据一致性,基于ZK,ETCD数据一致性中间件做分数是锁,才是王道.但是Redis也能满足最基本的需求. 参考: https://www.cnblo ...
- rt-thread下调试elmfat 问题记录
硬件平台:stm32f107 SPI flash:w25q32 RTT版本:v2.1 w25q32的驱动大神们已经写好(w25qxx.c),我只需要照猫画虎的实现相应SPI的驱动程序即可(bsp例 ...
- 【问题】为啥WMWare Workstation里面虚拟机的网关默认是NAT网关
今天做KickStart自动化安装实验,无意中发现一个奇怪现象. 先描述下我的实验环境:笔记本Win10,安装了WMWare Workstation,在WMWare Workstation上面安装了C ...
- Linux shell批量执行scp脚本工具
转载: linux shell + expect:批量scp脚本工具 2011-09-13 15:51:06 分类: Python/Ruby 最近在准备一个部署的任务,其中有一 ...