摘要:對對象發(fā)出的每個值,使用指定的函數(shù),進(jìn)行映射處理。示例圖以上代碼運行后,控制臺的輸出結(jié)果緩沖源對象已發(fā)出的值,直到大小達(dá)到給定的最大。該操作符也會先處理前一個對象,在處理下一個對象。
map
對 Observable 對象發(fā)出的每個值,使用指定的 project 函數(shù),進(jìn)行映射處理。
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--...
以上代碼運行后,控制臺的輸出結(jié)果:
2 3 4 ...mapTo
對 Observable 對象發(fā)出的每個值,映射成固定的值。
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--...
以上代碼運行后,控制臺的輸出結(jié)果:
2 2 2 ...scan
對 Observable 發(fā)出值,執(zhí)行 accumulator 指定的運算,可以簡單地認(rèn)為是 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)|
以上代碼運行后,控制臺的輸出結(jié)果:
h he hel hell hello complete
(備注:scan 與 reduce 最大的差別就是 scan 最終返回的一定是一個 Observable 對象,而 reduce 的返回類型不是固定的)
buffer緩沖源 Observable 對象已發(fā)出的值,直到 closingNotifier 觸發(fā)后,才統(tǒng)一輸出緩存的元素
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])
以上代碼運行后,控制臺的輸出結(jié)果:
[0,1,2] [3,4,5] [6,7,8] ....bufferTime
設(shè)定源 Observable 對象已發(fā)出的值的緩沖時間。
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])
以上代碼運行后,控制臺的輸出結(jié)果:
[0,1,2] [3,4,5] [6,7,8] ....bufferCount
緩沖源 Observable對象已發(fā)出的值,直到大小達(dá)到給定的最大 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])
以上代碼運行后,控制臺的輸出結(jié)果:
[0,1,2] [3,4,5] [6,7,8] ....concatMap
對每個 Observable 對象發(fā)出的值,進(jìn)行映射處理,并進(jìn)行合并。該操作符也會先處理前一個 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---------...
以上代碼運行后,控制臺的輸出結(jié)果:
0 1 2 0 1 2
concatMap 其實就是 map 加上 concatAll 的簡化寫法。
switchMap對源 Observable 對象發(fā)出的值,做映射處理。若有新的 Observable 對象出現(xiàn),會在新的 Observable 對象發(fā)出新值后,退訂前一個未處理完的 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-----------...
以上代碼運行后,控制臺的輸出結(jié)果:
0 0 1 2
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94164.html
摘要:操作符防抖動,只有當(dāng)另一個發(fā)射值時,才取源的最新數(shù)據(jù)進(jìn)行發(fā)射,其他數(shù)據(jù)取消發(fā)射。輸出從源數(shù)據(jù)集的第一項開始進(jìn)行發(fā)射,直到另一個開始發(fā)射第一個值時,源停止發(fā)射值。 rxjs5.x filter操作符api debounce 防抖動,只有當(dāng)另一個Observable發(fā)射值時,才取源Obervable的最新數(shù)據(jù)進(jìn)行發(fā)射,其他數(shù)據(jù)取消發(fā)射。 // 每次點擊,且當(dāng)計時器的最新值未被發(fā)射時,才從計...
摘要:源碼學(xué)習(xí)筆記該類是用來加密的引擎類,支持對稱和非對稱加密。函數(shù)創(chuàng)建對象操作其中方法是在中操作的方法,其他幾個都使用執(zhí)行。狀態(tài)變化內(nèi)部類內(nèi)部類是用來解析中傳入的字符串的。查詢時,也會查詢別名是否等于。知其然知其所以然。 javax.crypto.Cipher 源碼學(xué)習(xí)筆記 該類是JCE用來加密的引擎類,支持對稱和非對稱加密。該類的介紹可以參考:[[譯]JCA參考指南(二):核心類和接口]...
摘要:這些切片稱為窗口。函數(shù)允許對常規(guī)數(shù)據(jù)流進(jìn)行分組。通常,這是非并行數(shù)據(jù)轉(zhuǎn)換,因為它在非分區(qū)數(shù)據(jù)流上運行。 showImg(https://segmentfault.com/img/remote/1460000017874226?w=1920&h=1271); 前言 在第一篇介紹 Flink 的文章 《《從0到1學(xué)習(xí)Flink》—— Apache Flink 介紹》 中就說過 Flink ...
閱讀 1174·2021-11-22 15:22
閱讀 3848·2021-10-19 13:13
閱讀 3597·2021-10-08 10:05
閱讀 3306·2021-09-26 10:20
閱讀 2993·2019-08-29 14:21
閱讀 2204·2019-08-27 10:55
閱讀 1879·2019-08-26 10:31
閱讀 2588·2019-08-23 16:47