發現以前忘了一組處理多維observable的操做符,現作補充。bash
多維observable指的是observable傳出的元素一樣也是observable,對這樣的監聽常常須要根據不一樣的狀況對其進行不一樣的合併處理。ui
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--..
複製代碼
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是把傳入的多個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--..
複製代碼
concatAll和map結合起來的簡便寫法ip
interval(1000).pipe(
concatMap(e => interval(100).pipe(take(15)))
).subscribe(res => console.log(res))
複製代碼
switchAll和map結合起來的簡便寫法it
interval(1000).pipe(
switchMap(e => interval(100).pipe(take(15)))
).subscribe(res => console.log(res))
複製代碼
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
使用concatAll 時必要要肯定observable可以結束。class
操做符如今算是介紹完了,下一篇講講subject。