摘要:對對象發出的每個值,使用指定的函數,進行映射處理。示例圖以上代碼運行后,控制臺的輸出結果緩沖源對象已發出的值,直到大小達到給定的最大。該操作符也會先處理前一個對象,在處理下一個對象。
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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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
閱讀 3584·2021-10-08 10:05
閱讀 3298·2021-09-26 10:20
閱讀 2987·2019-08-29 14:21
閱讀 2194·2019-08-27 10:55
閱讀 1876·2019-08-26 10:31
閱讀 2583·2019-08-23 16:47