摘要:操作符防抖動(dòng),只有當(dāng)另一個(gè)發(fā)射值時(shí),才取源的最新數(shù)據(jù)進(jìn)行發(fā)射,其他數(shù)據(jù)取消發(fā)射。輸出從源數(shù)據(jù)集的第一項(xiàng)開始進(jìn)行發(fā)射,直到另一個(gè)開始發(fā)射第一個(gè)值時(shí),源停止發(fā)射值。
rxjs5.x filter操作符api debounce
防抖動(dòng),只有當(dāng)另一個(gè)Observable發(fā)射值時(shí),才取源Obervable的最新數(shù)據(jù)進(jìn)行發(fā)射,其他數(shù)據(jù)取消發(fā)射。
// 每次點(diǎn)擊,且當(dāng)計(jì)時(shí)器的最新值未被發(fā)射時(shí),才從計(jì)時(shí)器發(fā)射一個(gè)值 Rx.Observable.interval( 1000 ) .debounce(( ) => Rx.Observable.fromEvent(document, "click")) .subscribe(x => console.log( x ));debounceTime
防抖動(dòng),一段時(shí)間內(nèi),只取最新數(shù)據(jù)進(jìn)行發(fā)射,其他數(shù)據(jù)取消發(fā)射。
// 每隔一秒,輸出一個(gè)計(jì)時(shí)器的值 Rx.Observable.interval( 1000 ) .debounceTime( 500 ) .subscribe(x => console.log( x ))distinct
去除重復(fù)的值
// 去除重復(fù)的值,輸出A,B,C,b Rx.Observable.of("A", "B", "C", "A", "b", "B") .distinct( ) .subscribe( x => console.log( x ))distinctUntilChanged
去除連續(xù)重復(fù)的值
// 去除連續(xù)重復(fù)的元素,輸出A,B,A,B,A Rx.Observable.of("A", "B", "B", "A", "B", "A", "A") .distinctUntilChanged( ) .subscribe( x => console.log( x ))distinctKeyUntilChanged
去除連續(xù)項(xiàng)中,擁有相同給予key值的value的項(xiàng)
let items = [ { age: 4, name: "Foo"}, { age: 7, name: "Bar"}, { age: 5, name: "Foo"}, { age: 6, name: "Foo"} ] Rx.Observable.of( ...items ) .distinctUntilKeyChanged("name") .subscribe( x => console.log( x )) // 輸出 // { age: 4, name: "Foo"} // { age: 7, name: "Bar"} // { age: 5, name: "Foo"}ElementAt
只發(fā)射指定位置的元素
// 下標(biāo)從0開始,輸出 ‘A’ Rx.Observable.of("A", "B", "B", "A", "B", "A", "A") .elementAt( 3 ) .subscribe( x => console.log( x ))Filter
自定義過(guò)濾規(guī)則,符合才把該值進(jìn)行發(fā)射
// 輸出奇數(shù):1,2,5,7,9,1 Rx.Observable.of(1,3,2,5,4,7,6,9,1) .filter( x => x % 2 !== 0 ) .subscribe( x => console.log( x ))First
只輸出第一個(gè)元素
// 只輸出第一個(gè)元素,輸出:1 Rx.Observable.of(1,3,2,5,4,7,6,9,1) .first( ) .subscribe( x => console.log( x ))ignoreElement
忽略所有值,一個(gè)也不發(fā)射
// 啥也不輸出 Rx.Observable.of(1,3,2,5,4,7,6,9,1) .ignoreElements( ) .subscribe( x => console.log( x ))audit、auditTime
audit當(dāng)另一個(gè)Observable發(fā)射值前,源Observable的值會(huì)被忽略,當(dāng)另一個(gè)Observable發(fā)射值時(shí),才從源Observable發(fā)射一個(gè)最新值,然后重復(fù)上述過(guò)程。
auditTime在指定等待時(shí)間內(nèi),源Observable的值會(huì)被忽略,等待結(jié)束后,發(fā)射一個(gè)源Observable的最新值,然后重復(fù)上述過(guò)程。
他們與throttle的區(qū)別是,第一個(gè)值的發(fā)射,是先等待再發(fā)射,而throttle是先發(fā)射第一個(gè)值,然后再等待。
// auditTime // 輸出2,5,8,11,13... Rx.Observable.interval( 1000 ) .auditTime( 2000 ) .subscribe( x => console.log( x ))last
返回源數(shù)據(jù)集的最后一個(gè)條目
// 返回最后一個(gè)條目,輸出:5 Rx.Observable.of(1,2,3,4,5) .last( ) .subscribe( x => console.log( x ))sample
當(dāng)另一個(gè)Observable發(fā)射值時(shí),才從源Observable數(shù)據(jù)集發(fā)射一個(gè)最新值
// 每次點(diǎn)擊輸出一個(gè)計(jì)時(shí)器的最新值 Rx.Observable.interval( 1000 ) .sample( Rx.Observable.fromEvent( document, "click" )) .subscribe( x => console.log( x ))sampleTime
每隔一定的時(shí)間間隔,發(fā)射一個(gè)源Observable數(shù)據(jù)集的最新值
// 每隔2秒,分別輸出 0,2,4,6,8.... Rx.Observable.interval( 1000 ) .sampleTime( 2000 ) .subscribe( x => console.log( x ))single
若源Observable數(shù)據(jù)集只有一個(gè)數(shù)據(jù)項(xiàng),則輸出該項(xiàng)。若多于一個(gè)數(shù)據(jù)項(xiàng),則報(bào)錯(cuò)
// 輸出 1 Rx.Observable.of( 1 ) .single( ) .subscribe( x => console.log( x ))skip
跳過(guò)源Observable數(shù)據(jù)集的n個(gè)數(shù)據(jù),然后才發(fā)射值。
// 跳過(guò)開頭2個(gè),輸出3,4 Rx.Observable.of(1,2,3,4) .skip( 2 ) .subscribe( x => console.log( x ))skipUntil
忽略源Observable開頭的一系列值,直到當(dāng)另一個(gè)Observable開始發(fā)射值,才會(huì)從源Observable開始發(fā)射值
// 3秒后,才每秒發(fā)射計(jì)時(shí)器的值,輸出:2,3,4,5,6..... Rx.Observable.interval( 1000 ) .skipUntil( Rx.Observable.of( 1 ).delay( 3000 )) .subscribe( x => console.log( x ))skipWhile
忽略源Observable開頭的一系列值,直到有一項(xiàng)符合條件,才開始從源Observable的該值開始,開始發(fā)射值。
// 輸出4,5,3,2,1 Rx.Observable.of( 1, 2, 3, 4, 5, 3, 2, 1) .skipWhile( x => x < 4 ) .subscribe( x => console.log( x )) 十八、take 從源Obervable的開頭開始,拿到n個(gè)數(shù)據(jù)項(xiàng)進(jìn)行發(fā)射,其余的數(shù)據(jù)項(xiàng)將被忽略。 // 每秒輸出:0,1,2 后結(jié)束 Rx.Observable.interval( 1000 ) .take( 3 ) .subscribe( x => console.log( x ))take
用于獲取 Observable 對(duì)象發(fā)出的前 n 項(xiàng)值,取完后就結(jié)束。
var source = Rx.Observable.interval(1000); var example = source.take(3); example.subscribe({ next: (value) => { console.log(value); }, error: (err) => { console.log("Error: " + err); }, complete: () => { console.log("complete"); } });
示例 marble 圖:
source : -----0-----1-----2-----3--.. take(3) example: -----0-----1-----2|
以上代碼運(yùn)行后,控制臺(tái)的輸出結(jié)果:
0 1 2 completetakeLast
從源Obervable的倒數(shù)第一個(gè)向前數(shù),拿到n個(gè)數(shù)據(jù)項(xiàng)并進(jìn)行發(fā)射,從開頭開始的的數(shù)據(jù)項(xiàng)將被忽略。
// 輸出5,6,7 Rx.Observable.of( 1,2,3,4,5,6,7 ) .takeLast( 3 ) .subscribe( x => console.log( x ))takeUtil
從源Observable數(shù)據(jù)集的第一項(xiàng)開始進(jìn)行發(fā)射,直到另一個(gè)Observable開始發(fā)射第一個(gè)值時(shí),源Observable停止發(fā)射值。
// 3秒后停止計(jì)時(shí)器的值輸出 Rx.Observable.interval( 1000 ) .takeUntil( Rx.Observable.of( 1 ).delay( 3000 )) .subscribe( x => console.log( x ))takeWhile
從源Observable數(shù)據(jù)集的第一個(gè)數(shù)據(jù)項(xiàng)開始發(fā)射值,直到遇到符合條件的第一個(gè)數(shù)據(jù)項(xiàng)后,停止源Observable數(shù)據(jù)集的發(fā)射
// 輸出:1,2,3 Rx.Observable.of( 1,2,3,4,3,2,1) .takeWhile( x => x < 4 ) .subscribe( x => console.log( x ))throttle
每當(dāng)源Observable數(shù)據(jù)集發(fā)射一個(gè)數(shù)據(jù)項(xiàng)時(shí),會(huì)等待另一個(gè)Observable發(fā)射值,在等待期間源Observable的值將被忽略并不會(huì)發(fā)射,直到另一個(gè)Observable發(fā)射了一個(gè)值時(shí),才把源Observable的最新值進(jìn)行發(fā)射
// 輸出0,3,6,9,12..... // 每次輸出一個(gè)值,至少等待兩秒后,才輸出最新值 Rx.Observable.interval( 1000 ) .throttle( x => Rx.Observable.interval( 2000 )) .subscribe( x => console.log( x ))throttleTime
每當(dāng)源Observable數(shù)據(jù)集發(fā)射一個(gè)數(shù)據(jù)項(xiàng)時(shí),會(huì)等待n秒,n秒后輸出源Observable的最新值。
// 輸出0,3,6,9,12..... Rx.Observable.interval( 1000 ) .throttleTime( 2000 ) .subscribe( x => console.log( x ))
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107505.html
摘要:對(duì)對(duì)象發(fā)出的每個(gè)值,使用指定的函數(shù),進(jìn)行映射處理。示例圖以上代碼運(yùn)行后,控制臺(tái)的輸出結(jié)果緩沖源對(duì)象已發(fā)出的值,直到大小達(dá)到給定的最大。該操作符也會(huì)先處理前一個(gè)對(duì)象,在處理下一個(gè)對(duì)象。 map 對(duì) Observable 對(duì)象發(fā)出的每個(gè)值,使用指定的 project 函數(shù),進(jìn)行映射處理。 var source = Rx.Observable.interval(1000); var newe...
摘要:可以使用方法替換常規(guī)循環(huán)以上代碼的產(chǎn)出所有這些原始流都像常規(guī)對(duì)象流一樣工作,但有以下不同之處原始流使用專門的表達(dá)式,例如代替或代替。原始流支持額外的終端聚合操作,以上代碼的產(chǎn)出有時(shí)將常規(guī)對(duì)象流轉(zhuǎn)換為基本流是有用的,反之亦然。 本文提供了有關(guān)Java 8 Stream的深入概述。當(dāng)我第一次讀到的Stream API,我感到很困惑,因?yàn)樗?tīng)起來(lái)類似Java I/O的InputStream,...
摘要:對(duì)于查詢的結(jié)果還可以進(jìn)行進(jìn)一步的操作。相當(dāng)于篩選條件,條件之間可是進(jìn)行組合。除了基本的,另外還有對(duì)于數(shù)組的等,對(duì)于時(shí)間有等。閑時(shí)更新如有錯(cuò)誤,多謝指正 安裝 首先需要安裝 MongoDB.Driver 包 nuget 首先的首先,需要安裝好 Mongo 數(shù)據(jù)庫(kù) 下載Mongo 配置好數(shù)據(jù)庫(kù),構(gòu)建好連接字符串就可以繼續(xù)使用了 連接字符串 ! mongodb 默認(rèn)是沒(méi)有用戶名和密...
摘要:數(shù)據(jù)流教程原文譯者飛龍協(xié)議這個(gè)示例驅(qū)動(dòng)的教程是數(shù)據(jù)流的深入總結(jié)。但是的數(shù)據(jù)流是完全不同的東西。數(shù)據(jù)流是單體,并且在函數(shù)式編程中起到重要作用。列表上的所有流式操作請(qǐng)見(jiàn)數(shù)據(jù)流的?;镜臄?shù)據(jù)流使用特殊的表達(dá)式,例如,而不是,而不是。 Java 8 數(shù)據(jù)流教程 原文:Java 8 Stream Tutorial 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 這個(gè)示例驅(qū)動(dòng)的教程是J...
摘要:歸約操作計(jì)算有效訂單總金額有效訂單總金額收集數(shù)據(jù)收集將流轉(zhuǎn)換為其他形式,方法作為終端操作,接收一個(gè)接口的實(shí)現(xiàn),用于給中元素做匯總的方法。 接上一篇:《Java8新特性之stream》,下面繼續(xù)接著講Stream 5、流的中間操作 常見(jiàn)的流的中間操作,歸為以下三大類:篩選和切片流操作、元素映射操作、元素排序操作:showImg(https://segmentfault.com/img/b...
閱讀 1263·2023-04-26 02:38
閱讀 947·2023-04-25 20:13
閱讀 3602·2021-11-19 11:31
閱讀 2406·2019-08-30 15:55
閱讀 2735·2019-08-30 14:11
閱讀 3173·2019-08-30 13:45
閱讀 1388·2019-08-29 18:41
閱讀 1161·2019-08-29 16:18