用可视化来理解switchMap, concatMap, flatMap,exhaustMap

Rxjs中有三种操作符都是用作从主流转换到从流上的,它们分别是switchMapconcatMapflatMapexhaustMapRxViz可以将流进行可视化,我们就利用RxViz来一探这四种操作符的异同。

一、相同点

总体上来说,四个操作符的作用都是:存在一个主流和一个从流,主流上每发射一次数据都会触发从流开始发射数据,最后数据都被打平到同一个输出流中,如下图所示。
图片描述

二、不同点

以下四个例子,主流是每500毫秒发射一次数据,从流是每200毫秒发射数据,每次主流发射数据都会触发从流。

1. switchMap

  • 代码:
var mainstream = Rx.Observable.interval(500);
mainstream.switchMap((x) => Rx.Observable.interval(200).take(5));
  • 可视化演示:

clipboard.png

  • 分析:

从结果可以看到,用switchMap的时候,从流每次只能发射2个数据0-1,这是因为主流每发射一次触发了从流的发射,但是在从流发射的过程中,如果主流又一次发射了数据,switchMap会截断上一次的从流,响应本次的主流,从而开启新的一段的从流发射。

2. concatMap

  • 代码:
var mainstream= Rx.Observable.interval(500);
mainstream.concatMap((x) => Rx.Observable.interval(200).take(5));
  • 可视化演示:

clipboard.png

  • 分析:

从结果可以看到,用concatMap的时候,虽然在从流还没有结束的时候,主流还在发射数据,主流会先把发射的数据缓存起来,等从流结束后立即响应主流的数据从而引发新一轮的从流发射,这有些类似与js的消息队列机制。所以我们看到它的输出流响应是连续的。

3. flatMap / mergeMap

代码:

var mainstream= Rx.Observable.interval(500);
mainstream.flatMap((x) => Rx.Observable.interval(200).take(5));
  • 可视化演示:

clipboard.png

分析:
从结果可以看出来,flatMap/mergeMap会即使响应主流中发射的每一个数据,它既不会忽略也不会缓存,这就导致主流中数据对应的从流产生了叠加。

4. exhaustMap

  • 代码:
var mainstream= Rx.Observable.interval(500);
mainstream.exhaustMap((x) => Rx.Observable.interval(200).take(5));
  • 可视化演示:

clipboard.png

  • 分析:

从结果可以看出,exhaustMap在从流还没有结束的时候如果主流仍然有数据在发射,它会忽略此时主流发射的数据,而在从流结束以后才会去响应主流中发射的数据。

前端攻城狮一枚

220 声望
11 粉丝
0 条评论
推荐阅读
前端算法题的修炼等级
例1:展开一个数组(多维): [[1,2],3,[4,[5,6,[7,8]]]] => [1,2,3,4,5,6,7,8]解答:考察递归的思想,其实递归是一种数学思想,把问题本身转化为能够用递归的形式表示的数学公式,那么再复杂的递归问题也可以...

魔法博士2阅读 1.4k

互联网+制造业:图扑数字孪生智慧工厂车间生产线
随着信息技术、自动化技术和人工智能等技术的快速发展和应用,智能制造已成为全球制造业发展的主流趋势。智能制造是将智能化、自动化、数字化和网络化等技术手段运用到制造过程中,使生产过程具有高度智能化、自...

hightopo阅读 1.4k

封面图
汽车制造工艺 2.5D 可视化组态监控 | 图扑软件
随着世界经济的不断发展,汽车作为一个如今随处可见的物体,从大体上概括是由四大部分组成:发动机、底盘、车身、电气系统。看似简单的几个名词组件,其内部却是由无数的细小零件构成,一辆汽车更是由上万个微小...

hightopo1阅读 578

封面图
图扑数字孪生工厂合集 | 智慧工厂可视化,推动行业数字化转型
图扑软件基于 HTML5(Canvas/WebGL/WebVR)标准的 Web 技术,满足了工业物联网跨平台云端化部署实施的需求,以低代码的形式自由构建三维数字孪生、大屏可视化、工业组态等等。从 SDK 组件库,到 2D 和 3D 编辑,...

hightopo阅读 823

封面图
图扑数字孪生助力智慧冷链园区实现大数据实时监控
近年来,业界学者及企业就智慧冷链物流展开深入研究,2010 年 IBM 发布的《智慧的未来供应链》研究报告中提出智慧供应链概念,并由此延伸出智慧物流概念,即智慧物流是以信息化为依托并广泛应用物联网、人工智能...

hightopo阅读 689

封面图
智慧工厂 | 图扑数字孪生汽车制造工艺车间
汽车作为国家的运输主要成员之一,对于国家的经济发展和社会的进步起着重要的作用。当前,汽车进入了改革发展的时期,汽车制造在科技的推动下朝着更加自动化的方向发展。本文图扑应用自研 HT for Web 3D 渲染引擎...

hightopo1阅读 590

封面图
图扑软件 | 数字孪生智慧水泥工厂
近年来,随着我国经济的发展和人民生活水平的提高,我国对于水泥行业的关注程度也越来越高,为了保证水泥行业的健康稳定发展,许多地方都在大力推动水泥生产技术创新工作。当前水泥行业的发展正处于新旧动能更迭...

hightopo阅读 563

封面图

前端攻城狮一枚

220 声望
11 粉丝
宣传栏