RxJS學習之路六(Operators(三))

發現以前忘了一組處理多維observable的操做符,現作補充。bash

多維observable指的是observable傳出的元素一樣也是observable,對這樣的監聽常常須要根據不一樣的狀況對其進行不一樣的合併處理。ui

concatAll

concatAll是把傳入的多個observable按順序合併爲一維,完成一個observable再進行下一個。spa

interval(1000).pipe(
      map(e => interval(1000).pipe(take(4))),
      concatAll()
    ).subscribe(res => console.log(res))
    
source1 :----0----1----2----.. 
        map(e => interval(1000).pipe(take(4)))
source1 :----0----1----2----..
             \    \
             \      ----0----1----2----3--...
             ----0----1----2----3--...
             concatAll()
example: ----0----1----2----3----0---1----2----3--..
複製代碼

switchAll

switchAlls是把傳入的多個observable按順序合併爲一維,可是有新的observable觸發,舊的就會中止。code

interval(1000).pipe(
      map(e => interval(500).pipe(take(4))),
      switchAll()
    ).subscribe(res => console.log(res))

source1 :----0----1----2----.. 
        map(e => interval(500).pipe(take(4)))
source1 :----0----1----2----..
             \    \
             \      --0--1--2--3--...
             --0--1--2--3--...
             switchAll()
example: ----0--1----0--1----0--1--..
複製代碼

mergeAll

mergeAll是把傳入的多個observable按順序合併爲一維,全部obserable同時按本身的事件順序觸發。事件

interval(1000).pipe(
      map(e => interval(500).pipe(take(15))),
      mergeAll()
    ).subscribe(res => console.log(res))
    
source1 :----0----1----2----.. 
        map(e => interval(100).pipe(take(4)))
source1 :----0----1----2----..
             \    \
             \     --0--1--2--3--...
             --0--1--2--3--...
             mergeAll()
example: ----0--1--2--03--14--025--..
複製代碼

concatMap

concatAll和map結合起來的簡便寫法ip

interval(1000).pipe(
      concatMap(e => interval(100).pipe(take(15)))
    ).subscribe(res => console.log(res))
複製代碼

switchMap

switchAll和map結合起來的簡便寫法it

interval(1000).pipe(
      switchMap(e => interval(100).pipe(take(15)))
    ).subscribe(res => console.log(res))
複製代碼

mergeMap

mergeAll和map結合起來的簡便寫法pip

interval(500).pipe(
      mergeMap(e => interval(100).pipe(take(15)))
    ).subscribe(res => console.log(res))
複製代碼

小結

switchMap, mergeMap, concatMap這三個操做符的共同點就是他們第一個參數的回調東西均可以直接轉換爲obserable,從而簡化了map的生成observable的操做。三種操做符的用處各不相同:console

  • 當不但願有並行處理,而且要求每一個請求都能執行徹底的狀況適合用cancatMap;
  • 當只須要最後一次的狀況時,適合用SwitchMap;
  • 當有條件進行多個並行處理,而且要求處理每一個請求的狀況時用mergeMap;

使用concatAll 時必要要肯定observable可以結束。class

操做符如今算是介紹完了,下一篇講講subject。

相關文章
相關標籤/搜索