學習指南:操作符
1.數學類:必須等上游完結才給下游傳遞唯一數據;
(1)count():統計上游Observable對象吐出的所有數據個數;
(2)max()/min():可接受比較函數做參數;
(3)reduce(fn(acc,current),初始值)
- fn是規約函數,acc表示當前的累積值,current表示當前Observable對象吐出的值;
- 初始值:累積值的初始值;
2.條件布爾類操作符:
(1)every(fn):上游的Observable對象吐出的每一個數據都會被fn()檢驗,若所有數據的判定結果都是true,則吐出true,否則一旦不滿足判定條件,就返回false并完結;
(2)find(fn):返回滿足fn判定條件的第一個元素,若沒有滿足判定條件的元素則返回undefined后完結;
(3)findIndex(fn):返回滿足fn判定條件的第一個元素的序號,若沒有滿足條件的元素則返回-1后完結;
(4)isEmpty():檢查上游Observable對象是否是沒有吐出任何數據就完結的Observable對象;
3.過濾類操作符:判定數據流對每個數據是否有資格進入下游;
(1)filter():產生數據的時機與上游是一致的,當上游產生數據時,只要滿足判定條件,就會立刻被同步傳給下游;
(2)first():
- 無參數:找到上游Observable對象吐出的第一個數據就完結;
- 有參數:
- 參數1:判定函數fn()
- 參數2:函數(滿足條件的值,序號)對滿足判定條件的數據進行操作;
- 參數3:當上游沒有滿足判定條件時傳遞給下游對象的默認值,若不設置則會傳一個EmptyError;
const first$ = s$.first(
x => x < 0, //判定條件是找出負數;
f => f, // 對找到的負數做相應的處理;
-1 //若沒有負數則返回-1;
)
(3)last():找出Observable對象中滿足判定條件的最后一個數據;因此last要等Observable對象完結時才吐出數據;
(4)take(count):限定從上游Observable對象取出的數據量;
(5)takeCountWhile(count, fn):對上游Observable的每個數據用fn判定,立刻傳給take,只要取到了count個數據即完結;
(6)**takeUntil(notifier吐出一個數據或完結,上游通往下游的通道被關閉;
const s$ = Observbale.interval(1000);
const n$ = Observable.timer(2500);
const takeUntil$ = s$.takeUntil(n$); //上游Observable對象每間隔一秒吐出一個遞增的數據,在2.5s之后完結,因為n$有了值;
(7)skip(count):忽略上游Observable對象的前count個數據,從第count+1個數據開始,上下游Observable對象保持一致了;若上游吐出的數據不夠count個,則skip產生的Observable對象就會在上游完結時立刻完結;
3.轉化數據流
(1)map()
(2)switchMap():同一時間內只維護一個內部Observable對象;