什么是Operators

Operators是用来操作处理Observable 的一个函数,对单个或多个Observable进行一定处理后返回新的Observable。

描述各种Operators的功能时我们用Marble diagrams来可视化的表达,不了解这种方式的同学可以参考IT邦的Marble diagrams的详细介绍。

map 和 filter

map,filter和数组的map类似,传入一个callback,参数的意义也一样。

    interval(1000).pipe(map(t => t =  t + 1),filter(t => !!(t % 2)) // 筛选出来奇数).subscribe(res => console.log(res))//Marble diagramsorigin: -----0-----1-----2-----3--...map(x => x + 1)map:    -----1-----2-----3-----4--...filter(t => !!(t % 2))filter: -----1-----------3--------...复制代码

mapTo

mapTo可以把传进来的值改成一个固定的值

   interval(1000).pipe(mapTo(2)).subscribe(res => console.log(res))//Marble diagramsorigin: -----0-----1-----2-----3--...mapTo(2)mapTo:  -----2-----2-----2-----2--...
复制代码

take 和 first

take是取前几个元素后结束observable,first就是取第一个元素后直接结束,和take(1)一样

interval(1000).pipe(take(3)).subscribe(res => console.log(res))//Marble diagramsorigin: -----0-----1-----2-----3--...take(3)take:   -----0-----1-----2
复制代码

skip

skip和take相反,用于跳过前面的n个元素

interval(1000).pipe(skip(2)).subscribe(res => console.log(res))//Marble diagramsorigin: -----0-----1-----2-----3--...skip(2)skip:   -----------------2-----3--...
复制代码

takeLast 和 last

takeLast 就是选取后n个元素,last就是取最后一个元素,因为是最后的元素,在为结束前无法预知何时结束,所以takelast是在observable完成以后再同步送出

interval(1000).pipe(take(3),takeLast(2)).subscribe(res => console.log(res))//Marble diagramsorigin: -----0-----1-----2-----3--...take(3)take:   -----0-----1-----2takeLast(2)take:   -----------------(12)
复制代码

takeUntil

takeUntil的作用是在某件事情发生时observer送出complete,从而停止并关闭这个observable,takeUntil中必须传入一个observable对象。

let click = fromEvent(document.body, 'click');
interval(1000).pipe(takeUntil(click)).subscribe(res => console.log(res))//Marble diagramsorigin:      -----0-----1-----2-----3--...takeUntil(click)       clicktakeUntil:   -----0-----1-----2--
复制代码

takeUntil在实际工作中有很多运用,例如在离开某模块或者页面时,触发组件内所有observable的takeUntil,关闭所有监听,防止浪费内存,还有在某些行为监听中,当用户触发了特点行为关闭监听。

concatAll

concatAll的作用是当observable送出的元素也是observable时,将所有observable串联起来。需要注意的一点,不论是同步还是异步的observable,先发出来的元素必须执行完才会执行下一个。

let obs1 = interval(1000).take(5);
let obs2 = interval(500).take(2);
let obs3 = interval(2000).take(1);of(obs1, obs2, obs3).pipe(concatAll()
).subscribe(res => cosnole(res))origin : (o1                 o2      o3)|\                  \       \--0--1--2--3--4|   -0-1|   ----0|concatAll()        concatAll:  --0--1--2--3--4-0-1----0|复制代码

concat

concat和concatAll一样是把多个observable串联起来,只是用法不一样,concat可以传入observable参数,可以用于在observable执行过程中插入新的observable。同样,它要等到前一个observable完成后才能进行下一个的操作。

let obs2 = interval(500).take(2);
let obs3 = interval(500).take(1);interval(1000).pipe(take(3),concat(obs2,obs3)
).subscribe(res => cosnole(res))origin : ----0----1----2|
obs2: --0--1|
obs3: --0|concat()
concat: ----0----1----2--0--1--0|
复制代码

小结

这些操作符都是比较简单和常用的。下一篇会将其他操作符进行介绍。之后会有一个对操作符综合使用的举例。

转载于:https://juejin.im/post/5c9241905188252da05f41d0

RxJS学习之路四(Operators(1))相关推荐

  1. Java多线程学习之路(四)---死锁(DeadLock)

    Java多线程学习之路(四)-死锁(DeadLock) 1.定义 死锁就是多个线程在竞争共享资源的时候,相互阻塞,不能脱身的状态(个人理解).其实死锁一定程度上可以看成一个死循环. 举个现实生活中的例 ...

  2. typescript学习之路(四) —— ts类的继承(包含es5以及es6的类继承)

    上一文已经写了es5,es6等类的定义,所以本章主要写es5和es6的继承,由于es6的继承和ts的继承如出一辙,只是加了类型定义而已,所以ts的继承稍微写下,不会太详细. 文章目录 es5继承 原型 ...

  3. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  4. metasploit学习之路(四)记一次实战--永恒之蓝(MS017-010)

    在我的metasploit的学习博客中,也算是实操的一篇,可以对使用流程和一些必要的命令进行学习. 永恒之蓝这个漏洞我没有复现过,但是这一次偶然的机会玩了一把. 大佬在讲台上面传授经验,用的是wind ...

  5. Hive学习之路(四):Hive内置函数介绍与实现WordCount

    内容简介 一.Hive内置函数介绍 二.Hive常用内置函数介绍 1.数值计算函数 2.字符串操作函数 3.日期函数 4.聚合函数 5.表生成函数 三.使用Hive函数完成WordCount 1.创建 ...

  6. 前端Vue学习之路(四)axios请求数据

    axios 1.增加新知识 2.旧方案 3.新方案(一) 4.为什么要用拦截器 (新方案二) 1.增加新知识 假如每个组件都引用axios,后期如果axios库不再维护了,那每个组件都要改动 所以封装 ...

  7. 【python3的学习之路四】使用list和tuple

    list list是一种有序的集合,可以随时添加和删除其中的元素.当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(class ...

  8. typescript学习之路(三) —— ts定义类的方法(包含es5以及es6的定义类)

    提起类,不得不说一下,强类型编程语言,如php,java,c++等都有类的概念.而js作为一门弱类型语言,是没有类这个概念的,虽然也能模拟类的实现,但总归不是类.so,ts也只是模拟类而已,使得更贴切 ...

  9. matlab中tunx_f是什么意思,MATLAB学习笔记(四)【更新ing】

    斑码教育web前端课程笔记-第十四天-CSS 斑码教育web前端课程笔记-第十四天-CSS 一.复习 定位:position static 默认值 没有定位在文档流 relative:相对定位 自己原 ...

最新文章

  1. JAVA常见面试题之Error、RuntimeException、CheCkedException
  2. hdu 1757 矩阵连乘
  3. 查看线上环境中的jvm参数
  4. 嵌套字典|python_Python | 如果不是,则使用嵌套,根据销售额计算折扣
  5. 计算机网络中tdm是什么,计算机网络-复习题(1)
  6. 爬虫-在请求头中添加cookie键值对 访问登陆后可见的页面
  7. (138)FPGA面试题-Verilog HDL中function和task的区别(二)
  8. 开启 TLS 1.3 加密协议,极速 HTTPS 体验
  9. QCon北京2015精彩内容前瞻:运维、服务质量、云平台、移动、机器学习、编程语言...
  10. oracle+基础常用命令,oracle 常用命令(适合菜鸟)
  11. mugen linux主程序,Mugen主程序报错汇总
  12. FIT2CLOUD飞致云发布MeterSphere开源持续测试平台
  13. 训练好的word2vec模型(中文词向量)
  14. Python实战:导出QQ聊天记录生成词云看看你和你的女友聊了什么
  15. 如何手动启动消防广播_消防应急广播应如何规范设置?
  16. 关于IDEA下载安装,jpcap与wincap的一些使用方法
  17. 游戏建模工作内容是什么
  18. Codeforces 513G1 or 513G2 Inversions problem DP
  19. Kinova 之 mico刷机教程
  20. oracle报错1034,oracle数据库登陆报错ora-1034

热门文章

  1. Springdata_自己的小小总结02
  2. Excel教程实用技巧100条连载一
  3. nginx隐藏版本信息
  4. PTA(每日一题)7-45 小霸王
  5. 504 压测geteway_热门开源网关的性能对比:Goku、Kong Tyk
  6. java简单工厂设计模式
  7. multi-task
  8. SqlException: 对象名 ‘dbo.clientAgent‘ 无效。
  9. Python替换docx模板文件内容
  10. 什么是著作权人,著作权人的权利有哪些