你必须知道的6个Rxjs的操作符

1.Concat

const getPostOne$ = Rx.Observable.timer(3000).mapTo({id: 1});
const getPostTwo$ = Rx.Observable.timer(1000).mapTo({id: 2});

Rx.Observable.concat(getPostOne$, getPostTwo$).subscribe(res => console.log(res));

合并多个observables,当你一次性subscribe的时候,次操作符会合并多个observable的结果到输出的obserable中。

如果你的关注点在于输出的顺序的情况下,可以使用此操作符。比如当你需要按顺序发送ajax请求的时候可以使用此操作符。

2.forkJoin

forkJoin是Promise.all()方法的Rx版本。

const getPostOne$ = Rx.Observable.timer(1000).mapTo({id: 1});
const getPostTwo$ = Rx.Observable.timer(2000).mapTo({id: 2});

Rx.Observable.forkJoin(getPostOne$, getPostTwo$).subscribe(res => console.log(res)) // 打印[{id: 1}, {id: 2}]

当你需要并发的运行observable的时候使用此操作符。

3.mergeMap

const post$ = Rx.Observable.of({id: 1});
const getPostInfo$ = Rx.Observable.timer(3000).mapTo({title: "Post title"});

const posts$ = post$.mergeMap(post => getPostInfo$).subscribe(res => console.log(res));

首先说下Rx中的两个术语:

1.source observable 这里指的是post$

2.inner observable 这里指的是getPostInfo$

当inner observable发出值得时候,合并值到输出的observable中。

4.pairWise

// Tracking the scroll delta
Rx.Observable
  .fromEvent(document, ‘scroll‘)
  .map(e => window.pageYOffset)
  .pairwise()
  .subscribe(pair => console.log(pair)); // pair[1] - pair[0]

把当前的值和上一个值作为数组输出。如上示例当触发scroll事件的时候可以输出[10, 11] [11, 12] [12, 13]...

5.switchMap

const clicks$ = Rx.Observable.fromEvent(document, ‘click‘);
const innerObservable$ = Rx.Observable.interval(1000);

clicks$.switchMap(event => innerObservable$)
                    .subscribe(val => console.log(val));

在这个示例中,每当点击document的时候之前的interval的subscription会被取消并且会开始一个新的值。

6.combineLatest

const clicks$ = Rx.Observable.fromEvent(document, ‘click‘);
const innerObservable$ = Rx.Observable.interval(1000);

clicks$.switchMap(event => innerObservable$)
                    .subscribe(val => console.log(val));

如果子流a在等待其他流发射数据期间又发射了新数据而且其他流未发送数据,则使用子流最新发射的数据进行合并。

原文地址:https://www.cnblogs.com/chargo/p/9576510.html

时间: 2024-07-31 09:56:17

你必须知道的6个Rxjs的操作符的相关文章

C#刨根究底:《你必须知道的.NET》读书笔记系列

一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP-王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心得和感悟,将技术问题以生动易懂的语言展开,层层深入,以例说理.全书主要,包括了.NET基础知识及其深度分析,以.NET Framework和CLR研究为核心展开.NET本质论述,涵盖了.NET基本知识几乎所有的重点内容.全书分为5个部分,第1部分讲述.NET与面向对象,从底层实现角度分析了.NET如何实现面向

《你必须知道的.NET》读书笔记一:小OO有大智慧

此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.对象  (1)出生:系统首先会在内存中分配一定的存储空间,然后初始化其附加成员,调用构造函数执行初始化,这样一个对象实体就完成了出生过程. Person aPerson = new Person("小周" , 25); (2)旅程:在某种程度上就是外界通过方法与对象交互,从而达到改变对象状态信息的过程.这也和人的生存之道暗合. aPerson.ChangeName("Edis

《你必须知道的.NET》读书笔记二:小OO有大原则

此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Facade模式.Proxy模式 (3)基本方法:Extract Interface 抽取接口.Extract Class 抽取类.Extract Method 抽取方法 (4)DEMO:数据库管理系统中根据不同权限进行CRUD操作(这里是使用Proxy模式重构后的代码)   (5)规则建议: ①一个类只有一个引

张维迎:你必须知道的10个经济学原理

张维迎:你必须知道的10个经济学原理 五道口金融沙龙2016-10-13 10:15:59阅读(0)评论(0) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 加群请联系(微信号:wdkjrsl),由其审核通过后拉您进群 五道口金融沙龙是鸿儒金融教育基金会主办的公益性金融教育沙龙.沙龙已成功举办十三期,嘉宾分别是鸿儒金融教育基金会理事长许均华博士.德润租赁董事长王琨 先生.天图资本合伙人杨辉生先生.申万宏源集团首席经济学家房四海博士.前高盛首席

程序员必须知道的10大基础实用算法及其讲解

程序员必须知道的10大基础实用算法及其讲解 原文出处: cricode 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比 较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构 上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子

《你必须知道的.NET》读书笔记三:体验OO之美

一.依赖也是哲学 (1)本质诠释:"不要调用我们,我们会调用你" (2)依赖和耦合: ①无依赖,无耦合: ②单向依赖,耦合度不高: ③双向依赖,耦合度较高: (3)设计的目标:高内聚,低耦合. ①低耦合:实现最简单的依赖关系,尽可能地减少类与类.模块与模块.层次与层次.系统与系统之间的联系: ②高内聚:一方面代表了职责的统一管理,一方面又代表了关系的有效隔离: (4)控制反转(IoC):代码的控制器交由系统控制而不是在代码内部,消除组件或模块间的直接依赖: (5)依赖注入(DI): ①

作为软件工程师,你必须知道的20个常识

1.针对面向对象的设计与分析:为了让软件有更好的可维护性,重用性以及快速开发, 简短的 OOAD 与它的 SOLID 原则对于每一个软件工程师来说都是该牢记的. 2.软件品质因素:软件工程的好坏与软件的品质因素是绝对关联的.请在开发过程中深刻的理解这一点. 3.数据结构与算法:深刻理解像数组,列表,栈,树,图,集合等这样的基本数据结构 ,并在软件开发过程的关键部分使用好的算法.这样整个软件逻辑就会很清晰了. 4.Big-O符号来标记算法复杂度:在开发过程中,请务必使用 Big-O 符号来比较两个

堆排序算法---《程序员必须知道的10大基础实用算法及其讲解》

> 原帖地址:http://www.oschina.net/question/1397765_159365 快速排序算法的基本特性: 时间复杂度:O(N * logN) 堆排序为不稳定排序,不适合记录较少的排序. var arr = [], count = 100, i = 0, parentIndex, exeCount = 0, startTime = + new Date(), stackSort = function(a){ if(a.length === 1) return a; va

《你必须知道的495个C语言问题》笔记--库函数

怎样把数字转为字符串(与atoi相反)?有itoa函数吗? 用sprintf就可以了: sprintf(string, "%d", number); 同理,也可以同sprintf把long型或浮点型转换成字符串(使用%ld或%f),也就是说,可以把sprintf看成是atol或者atof的 反函数. 怎样在日期上加n天?怎样取得两个日期的时间间隔? 第一个问题,mktime接受没有规范话的日期,所以可以用一个日期的struct tm结构,直接在tm_mday域上进行加减,然后 调用mk