Rx.js
rxjs/operators
concatMap
第二個 request 的發送時間是接在第一個 request 之後的,我們可以確保每一個 request 會等前一個 request 完成才做處理
https://ithelp.ithome.com.tw/articles/10188387
switchMap
前面發送的 request 已經不會造成任何的 side-effect 了,這個很適合用在只看最後一次 request 的情境,比如說 自動完成(auto complete),我們只需要顯示使用者最後一次打在畫面上的文字來做建議選項。
- request 還是會打出去(server 會收到),只是不在意前面的 response 了(只在意最後一個)
mergeMap / flatMap
bufferTime(2000)
整合 2 秒內的 actions,結合成 array 進到下個 operator
- 注意:會定時整理、並發送,即使沒有 action 傳進來
https://cn.rx.js.org/class/es6/Observable.js~Observable.html#instance-method-bufferTime
https://rxjs.dev/api/operators/bufferTime
empty
Creates an Observable that emits no items to the Observer and immediately emits a complete notification.
https://rxjs-dev.firebaseapp.com/api/index/function/empty
RxJS Marbles
pipe()
.take(1)
// 只取一次
filter(match fn), ofType(string)
match specific types in epics
tap(action => {})
Perform a side effect for every emission on the source Observable, but return an Observable that is identical to the source.
https://rxjs-dev.firebaseapp.com/api/operators/tap
Accessing the Store's State
https://redux-observable.js.org/docs/basics/Epics.html#accessing-the-stores-state