国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【rxjs5.x】Transformation操作符

isaced / 2936人閱讀

摘要:對對象發出的每個值,使用指定的函數,進行映射處理。示例圖以上代碼運行后,控制臺的輸出結果緩沖源對象已發出的值,直到大小達到給定的最大。該操作符也會先處理前一個對象,在處理下一個對象。

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作符

    摘要:操作符防抖動,只有當另一個發射值時,才取源的最新數據進行發射,其他數據取消發射。輸出從源數據集的第一項開始進行發射,直到另一個開始發射第一個值時,源停止發射值。 rxjs5.x filter操作符api debounce 防抖動,只有當另一個Observable發射值時,才取源Obervable的最新數據進行發射,其他數據取消發射。 // 每次點擊,且當計時器的最新值未被發射時,才從計...

    Forelax 評論0 收藏0
  • javax.crypto.Cipher 源碼學習筆記

    摘要:源碼學習筆記該類是用來加密的引擎類,支持對稱和非對稱加密。函數創建對象操作其中方法是在中操作的方法,其他幾個都使用執行。狀態變化內部類內部類是用來解析中傳入的字符串的。查詢時,也會查詢別名是否等于。知其然知其所以然。 javax.crypto.Cipher 源碼學習筆記 該類是JCE用來加密的引擎類,支持對稱和非對稱加密。該類的介紹可以參考:[[譯]JCA參考指南(二):核心類和接口]...

    余學文 評論0 收藏0
  • 《從0到1學習Flink》—— Flink Data transformation(轉換)

    摘要:這些切片稱為窗口。函數允許對常規數據流進行分組。通常,這是非并行數據轉換,因為它在非分區數據流上運行。 showImg(https://segmentfault.com/img/remote/1460000017874226?w=1920&h=1271); 前言 在第一篇介紹 Flink 的文章 《《從0到1學習Flink》—— Apache Flink 介紹》 中就說過 Flink ...

    oujie 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<