原创文章,转载请注明出处

理解

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的区别的更多相关文章

  1. [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 ...

  2. RxJS - Subject(转)

    Observer Pattern 观察者模式定义 观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态 ...

  3. import { Subject } from 'rxjs/Subject';

    shared-service.ts import { Observable } from 'rxjs/Observable'; import { Injectable } from '@angular ...

  4. [RxJS] Subject basic

    A Subject is a type that implements both Observer and Observable types. As an Observer, it can subsc ...

  5. [Javascript + rxjs] Introducing the Observable

    In this lesson we will get introduced to the Observable type. An Observable is a collection that arr ...

  6. [RxJS] Subject asObservable() method

    You can create your own state store, not using any state management libraray. You might have seen th ...

  7. 九、Rxjs请求对Observable进行封装

    1.引入 Http.Jsonp.Rxjs 三个模块 2.请求中添加一个 .map(res => res.json) 问题 1.Property 'map' does not exist on t ...

  8. rxjs简单的Observable用例

    import React from 'react'; import { Observable } from 'rxjs'; const FlowPage = () => { const onSu ...

  9. [rxjs] Creating An Observable with RxJS

    Create an observable var Observable = Rx.Observable; var source = Observable.create(function(observe ...

随机推荐

  1. asp.net core-15.Individual authentication 模板

    在visual studio code执行dotnet new mvc --help 可以查看执行命令 visual studio code先创建一个mvc的项目 dotnet new mvc -au ...

  2. 给初学PHP的学习线路和建议

    直入主题  1.熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作简单的网页,对元素属性相对熟悉. 2.理解动态语言的概念和运做机制,熟悉基本的PHP语法. 3.学习如何将PHP与HTML结 ...

  3. 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)

    原文:监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1) 如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面 ...

  4. Ajax中解析Json的两种方法

    eval(); //此方法不推荐 JSON.parse(); //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name" ...

  5. sql语句查询结果中添加自增列

    SELECT Row_Number() over ( order by getdate() ) as init , * FROM 表名

  6. kafka连接storm问题

    遇到缺少jar包的报错,参考https://www.jianshu.com/p/70c3a7f56386 参考上面的链接把jar包都放到storm/lib目录下后,使用localCluster的方法提 ...

  7. Java基于Redis的分布式锁

    分布式锁,其实最终还是要保证锁(数据)的一致性,说到数据一致性,基于ZK,ETCD数据一致性中间件做分数是锁,才是王道.但是Redis也能满足最基本的需求. 参考: https://www.cnblo ...

  8. rt-thread下调试elmfat 问题记录

    硬件平台:stm32f107   SPI flash:w25q32 RTT版本:v2.1 w25q32的驱动大神们已经写好(w25qxx.c),我只需要照猫画虎的实现相应SPI的驱动程序即可(bsp例 ...

  9. 【问题】为啥WMWare Workstation里面虚拟机的网关默认是NAT网关

    今天做KickStart自动化安装实验,无意中发现一个奇怪现象. 先描述下我的实验环境:笔记本Win10,安装了WMWare Workstation,在WMWare Workstation上面安装了C ...

  10. Linux shell批量执行scp脚本工具

    转载: linux shell + expect:批量scp脚本工具             2011-09-13 15:51:06 分类: Python/Ruby 最近在准备一个部署的任务,其中有一 ...