摘要:对对象发出的每个值,使用指定的函数,进行映射处理。示例图以上代码运行后,控制台的输出结果缓冲源对象已发出的值,直到大小达到给定的最大。该操作符也会先处理前一个对象,在处理下一个对象。
map
对 Observable 对象发出的每个值,使用指定的 project 函数,进行映射处理。
var source = Rx.Observable.interval(1000); var newest = source.map(x => x + 2); newest.subscribe(console.log);
示例 marble 图:
source: -----0-----1-----2-----3--... map(x => x + 2) newest: -----2-----3-----4-----5--...
以上代码运行后,控制台的输出结果:
2 3 4 ...mapTo
对 Observable 对象发出的每个值,映射成固定的值。
var source = Rx.Observable.interval(1000); var newest = source.mapTo(2); newest.subscribe(console.log);
示例 marble 图:
source: -----0-----1-----2-----3--... mapTo(2) newest: -----2-----2-----2-----2--...
以上代码运行后,控制台的输出结果:
2 2 2 ...scan
对 Observable 发出值,执行 accumulator 指定的运算,可以简单地认为是 Observable 版本的 Array.prototype.reduce 。
var source = Rx.Observable.from("hello") .zip(Rx.Observable.interval(600), (x, y) => x); var example = source.scan((origin, next) => origin + next, ""); example.subscribe({ next: (value) => { console.log(value); }, error: (err) => { console.log("Error: " + err); }, complete: () => { console.log("complete"); } });
示例 marble 图:
source : ----h----e----l----l----o| scan((origin, next) => origin + next, "") example: ----h----(he)----(hel)----(hell)----(hello)|
以上代码运行后,控制台的输出结果:
h he hel hell hello complete
(备注:scan 与 reduce 最大的差别就是 scan 最终返回的一定是一个 Observable 对象,而 reduce 的返回类型不是固定的)
buffer缓冲源 Observable 对象已发出的值,直到 closingNotifier 触发后,才统一输出缓存的元素
var source = Rx.Observable.interval(300); var source2 = Rx.Observable.interval(1000); var example = source.buffer(source2); example.subscribe({ next: (value) => { console.log(value); }, error: (err) => { console.log("Error: " + err); }, complete: () => { console.log("complete"); } });
示例 marble 图:
source : --0--1--2--3--4--5--6--7.. source2: ---------0---------1--------... buffer(source2) example: ---------([0,1,2])---------([3,4,5])
以上代码运行后,控制台的输出结果:
[0,1,2] [3,4,5] [6,7,8] ....bufferTime
设定源 Observable 对象已发出的值的缓冲时间。
var source = Rx.Observable.interval(300); var example = source.bufferTime(1000); example.subscribe({ next: (value) => { console.log(value); }, error: (err) => { console.log("Error: " + err); }, complete: () => { console.log("complete"); } });
示例 marble 图:
source : --0--1--2--3--4--5--6--7.. bufferTime(1000) example: ---------([0,1,2])---------([3,4,5])
以上代码运行后,控制台的输出结果:
[0,1,2] [3,4,5] [6,7,8] ....bufferCount
缓冲源 Observable对象已发出的值,直到大小达到给定的最大 bufferSize 。
ar source = Rx.Observable.interval(300); var example = source.bufferCount(3); example.subscribe({ next: (value) => { console.log(value); }, error: (err) => { console.log("Error: " + err); }, complete: () => { console.log("complete"); } });
示例 marble 图:
source : --0--1--2--3--4--5--6--7.. bufferCount(3) example: ---------([0,1,2])---------([3,4,5])
以上代码运行后,控制台的输出结果:
[0,1,2] [3,4,5] [6,7,8] ....concatMap
对每个 Observable 对象发出的值,进行映射处理,并进行合并。该操作符也会先处理前一个 Observable 对象,在处理下一个 Observable 对象。
var source = Rx.Observable.fromEvent(document.body, "click"); var example = source.concatMap( e => Rx.Observable.interval(100).take(3)); example.subscribe({ next: (value) => { console.log(value); }, error: (err) => { console.log("Error: " + err); }, complete: () => { console.log("complete"); } });
示例 marble 图:
source : -----------c--c------------------... concatMap(c => Rx.Observable.interval(100).take(3)) example: -------------0-1-2-0-1-2---------...
以上代码运行后,控制台的输出结果:
0 1 2 0 1 2
concatMap 其实就是 map 加上 concatAll 的简化写法。
switchMap对源 Observable 对象发出的值,做映射处理。若有新的 Observable 对象出现,会在新的 Observable 对象发出新值后,退订前一个未处理完的 Observable 对象。
var source = Rx.Observable.fromEvent(document.body, "click"); var example = source.switchMap( e => Rx.Observable.interval(100).take(3)); example.subscribe({ next: (value) => { console.log(value); }, error: (err) => { console.log("Error: " + err); }, complete: () => { console.log("complete"); } });
示例 marble 图:
source : -----------c--c-----------------... concatMap(c => Rx.Observable.interval(100).take(3)) example: -------------0--0-1-2-----------...
以上代码运行后,控制台的输出结果:
0 0 1 2
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/94164.html
摘要:操作符防抖动,只有当另一个发射值时,才取源的最新数据进行发射,其他数据取消发射。输出从源数据集的第一项开始进行发射,直到另一个开始发射第一个值时,源停止发射值。 rxjs5.x filter操作符api debounce 防抖动,只有当另一个Observable发射值时,才取源Obervable的最新数据进行发射,其他数据取消发射。 // 每次点击,且当计时器的最新值未被发射时,才从计...
摘要:源码学习笔记该类是用来加密的引擎类,支持对称和非对称加密。函数创建对象操作其中方法是在中操作的方法,其他几个都使用执行。状态变化内部类内部类是用来解析中传入的字符串的。查询时,也会查询别名是否等于。知其然知其所以然。 javax.crypto.Cipher 源码学习笔记 该类是JCE用来加密的引擎类,支持对称和非对称加密。该类的介绍可以参考:[[译]JCA参考指南(二):核心类和接口]...
摘要:这些切片称为窗口。函数允许对常规数据流进行分组。通常,这是非并行数据转换,因为它在非分区数据流上运行。 showImg(https://segmentfault.com/img/remote/1460000017874226?w=1920&h=1271); 前言 在第一篇介绍 Flink 的文章 《《从0到1学习Flink》—— Apache Flink 介绍》 中就说过 Flink ...
阅读 1171·2021-11-22 15:22
阅读 3841·2021-10-19 13:13
阅读 3587·2021-10-08 10:05
阅读 3299·2021-09-26 10:20
阅读 2988·2019-08-29 14:21
阅读 2194·2019-08-27 10:55
阅读 1876·2019-08-26 10:31
阅读 2583·2019-08-23 16:47