Subject

Subject是可观察的一种特殊类型,它允许将值多播到许多观察者

import {Subject} from 'rxjs';

const l = console.log;
let x$ = new Subject<number>();
x$.subscribe(v => l(`a => ${v}`)); // 1, 2, 3
x$.next(1);
x$.next(2); setTimeout(() => {
x$.subscribe(v => l(`b => ${v}`)); // 3
x$.next(3);
}, 2000);

BehaviorSubject

Subject的变体,需要初始值,并且在订阅时会发出其当前值。

import {BehaviorSubject} from 'rxjs';

const l = console.log;
let x$ = new BehaviorSubject<number>(0);
x$.subscribe(v => l(`a => ${v}`)); // 0, 1, 2, 3
x$.next(1);
x$.next(2); setTimeout(() => {
// 订阅时发出当前值: 2
x$.subscribe(v => l(`b => ${v}`)); // 2, 3
x$.next(3);
}, 2000);

AsyncSubject

Subject的变体,仅在完成时才发出值。完成后,它将向所有观察者发出其最新值。

import {AsyncSubject} from 'rxjs';

const l = console.log;
let x$ = new AsyncSubject<number>();
x$.subscribe(l); // 2
x$.next(1);
x$.next(2);
x$.complete();

ReplaySubject

可“重放”或向新订阅者发出旧值。 它缓冲一定数量的值,除了向现有订户发送新值外,还将立即将这些值发送给任何新订户。

import {ReplaySubject} from 'rxjs';

const l = console.log;
let x$ = new ReplaySubject<number>();
x$.subscribe(v => l(`a => ${v}`)); // 1, 2, 3
x$.next(1);
x$.next(2); setTimeout(() => {
// 2s后,向新的订阅发出旧的值:1,2
x$.subscribe(v => l(`b => ${v}`)); // 1, 2, 3
x$.next(3);
}, 2000);

rxjs 常用的subject的更多相关文章

  1. rxjs 常用的管道操作符

    操作符文档 api 列表 do -> tap catch -> catchError switch -> switchAll finally -> finalize map s ...

  2. RxJS——主题(Subject)

    主题(Subjects) 什么是主题?RxJS 主题就是一个特性类型的 Observable 对象,它允许值多路广播给观察者(Observers).当一个简单的 Observable 是单播的(每个订 ...

  3. Rxjs常用operators

    本文使用的是angular6内置的rxjs,版本号为6.3.3 concat 通过顺序地发出多个 Observables 的值将它们连接起来,一个接一个的. 参数: 名称 类型 属性 描述 other ...

  4. rxjs 常用的静态操作符

    操作符文档 API create const { Observable } = require('rxjs'); // 创建 Observables var observable = Observab ...

  5. RxJS - Subject(转)

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

  6. RxJS速成 (下)

    上一部分: http://www.cnblogs.com/cgzl/p/8641738.html Subject Subject比较特殊, 它即是Observable又是Observer. 作为Obs ...

  7. rxjs简单入门

    rxjs全名Reactive Extensions for JavaScript,Javascript的响应式扩展, 响应式的思路是把随时间不断变化的数据.状态.事件等等转成可被观察的序列(Obser ...

  8. RxJS v6 学习指南

    为什么要使用 RxJS RxJS 是一套处理异步编程的 API,那么我将从异步讲起. 前端编程中的异步有:事件(event).AJAX.动画(animation).定时器(timer). 异步常见的问 ...

  9. Rxjs 操作符

    1. javascript解决异步编程方案 解决javascript异步编程方案有两种,一种是promise对象形式,还有一种是是Rxjs库形式,Rxjs相对于Promise来说,有好多Promise ...

随机推荐

  1. git本地检出远程分支

    场景:本地分支被误物理删除,想要重新将自己的分支代码从远程拉取下来.(此时取的是最后一次git push上去的分支代码) 1.与远程仓库重新建立关系 1 git clone git@gitlab.名称 ...

  2. Spring 动态代理时是如何解决循环依赖的?为什么要使用三级缓存?

    前言 在研究 『 Spring 是如何解决循环依赖的 』 的时候,了解到 Spring 是借助三级缓存来解决循环依赖的. 同样在上一节留下了疑问: 循环依赖为什么要使用三级缓存?而不是使用二级缓存? ...

  3. hadoop知识点总结(三)YARN设计理念及基本架构

    YARN设计理念与基本架构 1,MRv1的局限性:扩展性差,可靠性差,资源利用率低,无法支持多种计算框架 2,YARN基本设计思想 1)基本框架对比 Hadoop1.0中,JobTracker由资源管 ...

  4. js创建map

    function Map() { var struct = function(key, value) { this.key = key; this.value = value; } var put = ...

  5. Pythonchallenge1过关攻略

    第一关上来是一个电视,上面写着2^38,这就非常关键了,这时候我们已经有了大致思路,再看一眼电视机下面的话确认一下,"Hint: try to change the URL address. ...

  6. 关于base64编码Encode和Decode编码的几种方式--Java

    Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应用上,Base64除了能将Binary资料可视化之外 ...

  7. JDK-7新特性,更优雅的关闭流-java try-with-resource语句使用

    前言 公司最近代码质量整改,需要对大方法进行调整,降低到50行以下,对方法的深度进行降低,然后有些文件涉及到流操作,很多try/catch/finally语句,导致行数超出规范值,使用这个语法可以很好 ...

  8. GPLT L2-006 树的遍历(二叉树)

    题意: 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 思路: 后序遍历序列 = 左子树遍历序列 + 右子树遍历序列 + 根节点. 中序遍历序列 = ...

  9. Git管理远程仓库

    一:使用远程仓库的目的 作用:备份,实现代码共享集中化管理: 二:将git本地仓库同步到远程仓库流程图 三:Git克隆操作 目的: 将远程仓库(github远程仓库项目代码)克隆到本地 如何克隆 1. ...

  10. 3.使用nginx-ingress

    作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-06-25 13:54:15 星期二 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...