這個系列不知不覺已經寫到10了,單純從使用上來講的話,大部分的知識點也都講過了,原本不打算寫了,恰好今天有同窗在羣裏說但願能總結一下經常使用的操做符,那就用這篇文章給這個系列畫一個句號吧。api
已經提到過的
早在這個系列的第4,第5章的時候就提到過了操做符,有興趣的同窗能夠翻一下,這裏簡單的回顧一下:服務器
- 建立類:3個,分別是 from,of 和 timer;
- 過濾類:5個,分別是 filter, first, skip,take 和 takeUntil;
- 組合類:5個,分別是 combineLatest, withLatestFrom, zip, merge, forkJoin;
- 轉換類:5個,分別是 map, mergeMap,switchMap, concatMap, groupBy;
- 聚合類:2個,分別是 reduce,scan;
另外在其它的章節的示例中用到過的還有delay,retryWhen,share,switchMapTo,mapTo,bufferCount,delay,takeWhile,若是看到這些名字你就能清楚的說出它們的做用的話,那麼恭喜你,數據處理中要面臨的多數場景其實你都已經能夠應付了。app
rxjs的操做符大體有120個左右(5.x版本),除了上面那28個,咱們再來看下還有哪些會常常用到。函數
其它一些經常使用的操做符
這章裏就不詳細的解釋每一操做符了,只簡單提一下功能,關於如何學習它們能夠參照第4章的內容。學習
-
x 到 xMap 再到 xMapTo。xMap,這類操做符大都是在基礎功能上增長 map 功能。加上To之後的操做符xMapTo大都是直接將輸入流映射到一個輸出流,而且它們都不關心輸入流上的值。spa
- concat 鏈接流,須要注意被鏈接的流須要發出完成通知。
- concatMapTo 和concatMap相似,只不過鏈接的流始終是相同行爲的流。
- mergeMapTo 和mergeMap相似,只不過內部流始終是相同行爲的流。
-
使代碼更好的保持響應式風格的操做符調試
- never 一條永遠不會發出任何通知的流。
- empty 一條只發出,而且馬上發出完成通知的流。
- defaultIfEmpty 若是輸入流沒發出任何值,只發出完成通知,那麼發出一個默認值。
-
與錯誤相關的一些操做符,如已經提到的retryWhenrxjs
- retry 當輸入流上有錯誤時,能夠發出重試,傳入的參數就是重試的次數。
- catchError 5.x版本里叫 catch,毫無疑問就是用來捕獲流上的錯誤的。
- throwError 一條只發出,而且馬上發出錯誤通知的流。
-
用來週期性發出值的流,如已經提到的timer圖片
- interval 只看名字就知道它就是一個計時器,參數就是發出值的週期。
-
一些下降數據發出頻率的操做符 或者 防止值重複的操做符ip
- distinct 用來鑑別值是否應該被認爲是相同的,能夠接受一個可選的函數做爲參數。
- distinctUntilChanged 這個操做符最大的優點在於,傳入它的函數,能夠接收當前值和前一個值做爲參數。
- distinctUntilKeyChanged 這個就簡單粗暴多了,經過一個key來判斷值是否發出了改變。
- debounceTime 控制表單字段的數據發出頻率時常常會用到,好比輸入值改變時自動發出請求去服務器拉取數據的場景。
- auditTime 在必定時間內忽略輸入流上的值,只發出時間事後的輸入流上最後發出的值。
- throttleTime 和auditTime差很少,只是發出時間事後輸入流上最早出出的值。
-
其它
- partition filter 只能讓你拿到'true'或'false'的數據流,而這個操做符可讓你同時拿到兩個條,一條徹底發出'true‘值,另外一條徹底發出’false‘值。
- iff 在訂閱的那一瞬間再決定使用哪條一條流,第一個參數是判斷函數,第二個參數是斷定結果爲true時使用的流,第三個參數固然就是false時使用的流。
- timeout 通俗的說就是’我只想等xxx時間,這段時間內沒有發出值的話,我認爲over了。’,就是用來設置超時時間而已。
- tap 5.x的版本里也就作do,意思就是在數據處理的過程當中開個小差作點其它事情,好比調試時你會常常須要它把數據log到控制檯上。
- find 找到流上符合某個條件的第一個值。
- every 流上的值是否是都符合某一個條件。
加上以前的28個,一共總結了49個操做符,若是這些不能知足你的業務需求,能夠仔細研究一下官網上公佈的其它操做符,相信總有一款適合你!
![圖片描述 圖片描述](http://static.javashuo.com/static/loading.gif)