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

理解

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. 数据格式转换string.Format

    1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...

  2. Swagger 实践 <一>

    参考 :https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-nswag?view=aspnetcor ...

  3. 设计模式(四)——代理模式(Proxy)

    代理模式的参与者有:一个约束.一个代理者.一个被代理者.一个调用者 代理模式的实现很简单:还是那个房子,对于开门这个操作,我更换了一个远程解锁的门,那么我就可以通过这个远程连接的服务器远程解锁,这样我 ...

  4. 恺撒密码 B

    恺撒密码 B ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭ ...

  5. Async await 解析

    Async 定义:使异步函数以同步函数的形式书写(Generator函数语法糖) 原理:将Generator函数和自动执行器spawn包装在一个函数里 形式:将Generator函数的*替换成asyn ...

  6. 图片预加载的插件使用-jquery.imgpreload.min.js

    使用方法: //图片预加载 var the_images = [];//新建一个数组,然后将要加载的图片地址推入这个数组中: the_images.push( 'bg.jpg' ); var load ...

  7. 基2时抽8点FFT的matlab实现流程及FFT的内部机理

    前言 本来想用verilog描述FFT算法,虽然是8点的FFT算法,但写出来的资源用量及时延也不比调用FFT IP的好, 还是老实调IP吧,了解内部机理即可,无需重复发明轮子. 参考 https:// ...

  8. # JDK7+ MethodHandle

    简单例子 import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.i ...

  9. dubbo线程池作用于接口而不是方法

    记一次线上dubbo服务超时和线程池满问题排查 可能调用的接口没问题,但是该服务中的其他接口占用完了线程池,导致调用超时被拒绝处理.

  10. 【Zookeeper】实现哨兵机制(选举策略)

    一.Master选举使用场景及结构 二.代码实现 2.1 Maven依赖信息 2.2 IndexController 2.3 MyApplicationRunner 2.4 ElectionMaste ...