用可视化来理解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

本周遇到的问题
首先是又遇到了一些RXjs操作符,在这里简单的说一下。首先是 combineLatest。将其直接翻译过来就是结合最新的(observeble),那么结合一下下面这张图片就很容易理解了。combineLatest结合作为参数传递的所有 Obs...

李明2阅读 487

28个数据可视化图表的总结和介绍
数据可视化本身就是一种通用语言。我们这里通用语言的意思是:它能够向各行各业的人表示信息。它打破了语言和技术理解的障碍。数据是一些数字和文字的组合,但是可视化可以展示数据包含的信息。

deephub阅读 896

封面图
图扑软件 | 数字孪生钢厂人员安全定位
钢铁冶炼从原料采购、焦化烧结、炼铁、炼钢、轧钢、到产出成品,其冗长的生产工序、复杂的作业场景,更应加以重视生产现场的人员作业安全,将安全防范监管贯穿日常作业全过程,打通安全生产责任“最后一公里”。随...

图扑软件阅读 893

封面图
图扑智慧充电桩可视化运营平台|新能源数字化
电动汽车产业在新能源背景下蓄势勃发,已经成为当下广泛流行、节能环保的绿色出行交通工具。随着特斯拉、宝马、蔚来等众多新能源汽车企业的纷纷布局,市场主体多元化对充电桩多元化适配提出了更高的要求。

hightopo1阅读 734

封面图
虚拟现实 VR 碰撞 3D 可视化,图扑打造一体化管控平台
工信部《虚拟现实产业发展白皮书 5.0 》中明确提出:“通过财政资金促进虚拟现实技术产业化,支持面向工业、文化、教育等重点行业的虚拟现实技术应用”。

hightopo阅读 734

封面图
什么是3D可视化,为什么要使用3D可视化
3D可视化与3D图形、3D渲染、计算机生成图像和其他术语同义使用。3D可视化是指使用计算机软件创建图形内容的过程。简而言之,3D可视化是一种沟通形式,用于将项目中各个利益相关者之间的想法联系起来,无论是卖方...

3DCAT阅读 599

封面图

前端攻城狮一枚

220 声望
11 粉丝
宣传栏