do -> tap catch -> catchError switch -> switchAll finally -> finalize
mep 相似於 Array.prototype.map()
switchMap switchMap 會中止發出先前發出的內部 Observable 並開始發出新的內部 Observable 的值。(能夠中止上一次發出的ajax)
mergeMap 將每一個值映射到Observable,必須返回一個Observablees6
reduce 只返回最後的值ajax
// res: 12, 15 from([2, 3]).pipe( scan((acc, item) => acc += item, 10)) .subscribe(v => console.log(v)) // res: 15 from([2, 3]).pipe( reduce((acc, item) => acc += item, 10)) .subscribe(v => console.log(v))
filter 返回你想要的數據
partition 返回兩個 Observables [0] 符合斷言, [1] 不符合斷言api
from([2, 3, 4]).pipe( filter(item => item <= 3)) .subscribe(v => console.log(v))
將當前值和前一個值做爲數組放在一塊兒,而後將其發出數組
of(1, 2, 3) .pipe( pairwise()).subscribe(v => console.log(v)) [1,2] [2,3]
均可以接收一個函數做爲參數promise
from([1,2]).pipe(max()).subscribe(l) // 2 from([1,2]).pipe(min()).subscribe(l) // 1 from([1,2]).pipe(count()).subscribe(l) // 2
過濾掉重複的項app
from([1, 2, 2, 3, 2]) .pipe(distinct()) .subscribe(l); // 1,2,3
只發出第n個值, 而後完成 ,從0開始async
from([1, 2]) .pipe(elementAt(0, "default value")) .subscribe(l);
忽略源所發送的全部項,只傳遞 complete 或 error函數
skip 跳過源發出的前N個值
skipLast 跳過源最後發出的的N個值
skipWhile 跳過lambda返回true的值ui
take 接收源 最初的N個值
takeLast 接收源最後N個值
takeUntil notifier發出值, 源斷流
takeWhile lambda返回true,才發出源的值
先發出最新的值, 在忽略
先忽略, 在發出最新的值
interval(500) .pipe(auditTime(1000)) .subscribe(l); // 1s後發出 2, 1被忽略
延時發送源發出的值, 若是期間源發出了新值的話,返回的值爲最新的值,上一個會被丟棄掉(避免高消費事件時使用)
在週期時間間隔內發出源最新值。
相似 Array.prototype.find()
把 Observable 轉化爲 promise
click = async e => { let res = await ajax('http://localhost:1995/a').pipe(map(res => res.response)).toPromise(); l(res) }
buffer系列,將過去的值做爲數組收集,在事件觸發時發出收集好的值
const send$= fromEvent(document, 'click'); const interval = interval(1000); const buffered = interval.pipe(buffer(send$)); buffered.subscribe(l);
若是源Observable完成而沒有發出任何next值,則發出給定值 ,不然鏡像源Observable
const { of, from, empty } = require("rxjs"); const { mergeMap, defaultIfEmpty } = require("rxjs/operators"); from([1, 2, 2, 3, 2]) .pipe( mergeMap(el => (el > 10 ? of(el) : empty())), defaultIfEmpty("not data"), ) .subscribe(l); // not data
延遲來自源Observable的項目的發射
from([1, 2]) .pipe(endWith("源觀察完成後,附加一個發射,而後完成。")) .subscribe(l); // 1, 2, "源觀察完成後,附加一個發射,而後完成。"
pluck(properties: ...string); 取一個對象的屬性相似 obj.xxx.xxx toArray(); 把流發出的值塞在Array後,返回Array