-
Notifications
You must be signed in to change notification settings - Fork 0
RxJS
arthur791004 edited this page Aug 2, 2017
·
3 revisions
- take: 取前 N 個元素就結束
- first: 同 take(1)
- takeUntil: 在某件事發生時結束
- concatAll: 把所有元素 concat 在一起,按照 observable 的順序
- skip: 略過前 N 個元素
- takeLast: 取最後 N 個元素
- last: 同 takeLast(1)
- concat: 把多個 observable 合併成一個,按照 observable 的順序
- startWith: 在 observable 的一開始塞要發送的元素
- merge: 跟
concat
一樣都是用來合併 observable,按照時間的順序
- delay: 延遲 observable 一開始發送元素的時間點
- delayWhen: 跟 delay 很像,最大的差別是 delayWhen 可以影響每個元素,而且需要傳一個 callback 並回傳一個 observable
- throttle
- 會先開放送出元素,等到有元素被送出就會沈默一段時間,等到時間過了又會開放發送元素
- 比較像是控制行為的最高頻率,也就是說如果我們設定 1000 毫秒,那該事件頻率的最大值就是每秒觸發一次不會再更快
- debounce
- 每次收到元素,他會先把元素 cache 住並等待一段時間,如果這段時間內已經沒有收到任何元素,則把元素送出
- 如果這段時間內又收到新的元素,則會把原本 cache 住的元素釋放掉並重新計時,不斷反覆
- 比較像是必須等待的時間,要等到一定的時間過了才會收到元素。
- throttleTime, debounceTime
- input: ms
- switch: 永遠只處理最新的 observable!
- mergeAll: 跟
concatAll
一樣都是用來合併 observable,按照時間的順序 - concatAll: 把所有元素 concat 在一起,按照 observable 的順序
- switchMap: map + switch
source.map().switch() ---> source.switchMap()
- mergeMap: map + mergeAll
source.map().mergeAll() ---> source.mergeMap()
- concatMap: map + concatAll
source.map().concatAll() ---> source.concatMap()
- switchMap, mergeMap, concatMap
- concatMap 用在可以確定內部的 observable 結束時間比外部 observable 發送時間來快的情境,並且不希望有任何並行處理行為,適合少數要一次一次完成到底的的 UI 動畫或特別的 HTTP request 行為。
- switchMap 用在只要最後一次行為的結果,適合絕大多數的使用情境。
- mergeMap 用在並行處理多個 observable,適合需要並行處理的行為,像是多個 I/O 的並行處理。