學(xué)習指南:操作符
1.數(shù)學(xué)類:必須等上游完結(jié)才給下游傳遞唯一數(shù)據(jù)练俐;
(1)count():統(tǒng)計上游Observable對象吐出的所有數(shù)據(jù)個數(shù)泪勒;
(2)max()/min():可接受比較函數(shù)做參數(shù)肩钠;
(3)reduce(fn(acc,current),初始值)
- fn是規(guī)約函數(shù)谒臼,acc表示當前的累積值,current表示當前Observable對象吐出的值耀里;
- 初始值:累積值的初始值蜈缤;
2.條件布爾類操作符:
(1)every(fn):上游的Observable對象吐出的每一個數(shù)據(jù)都會被fn()檢驗,若所有數(shù)據(jù)的判定結(jié)果都是true冯挎,則吐出true底哥,否則一旦不滿足判定條件,就返回false并完結(jié)房官;
(2)find(fn):返回滿足fn判定條件的第一個元素趾徽,若沒有滿足判定條件的元素則返回undefined后完結(jié);
(3)findIndex(fn):返回滿足fn判定條件的第一個元素的序號翰守,若沒有滿足條件的元素則返回-1后完結(jié)孵奶;
(4)isEmpty():檢查上游Observable對象是否是沒有吐出任何數(shù)據(jù)就完結(jié)的Observable對象;
3.過濾類操作符:判定數(shù)據(jù)流對每個數(shù)據(jù)是否有資格進入下游蜡峰;
(1)filter():產(chǎn)生數(shù)據(jù)的時機與上游是一致的了袁,當上游產(chǎn)生數(shù)據(jù)時朗恳,只要滿足判定條件,就會立刻被同步傳給下游载绿;
(2)first():
- 無參數(shù):找到上游Observable對象吐出的第一個數(shù)據(jù)就完結(jié)粥诫;
- 有參數(shù):
- 參數(shù)1:判定函數(shù)fn()
- 參數(shù)2:函數(shù)(滿足條件的值,序號)對滿足判定條件的數(shù)據(jù)進行操作崭庸;
- 參數(shù)3:當上游沒有滿足判定條件時傳遞給下游對象的默認值怀浆,若不設(shè)置則會傳一個EmptyError;
const first$ = s$.first(
x => x < 0, //判定條件是找出負數(shù)冀自;
f => f, // 對找到的負數(shù)做相應(yīng)的處理揉稚;
-1 //若沒有負數(shù)則返回-1;
)
(3)last():找出Observable對象中滿足判定條件的最后一個數(shù)據(jù)熬粗;因此last要等Observable對象完結(jié)時才吐出數(shù)據(jù)搀玖;
(4)take(count):限定從上游Observable對象取出的數(shù)據(jù)量;
(5)takeCountWhile(count, fn):對上游Observable的每個數(shù)據(jù)用fn判定驻呐,立刻傳給take灌诅,只要取到了count個數(shù)據(jù)即完結(jié);
(6)**takeUntil(notifier吐出一個數(shù)據(jù)或完結(jié)猜拾,上游通往下游的通道被關(guān)閉;
const s$ = Observbale.interval(1000);
const n$ = Observable.timer(2500);
const takeUntil$ = s$.takeUntil(n$); //上游Observable對象每間隔一秒吐出一個遞增的數(shù)據(jù)佣盒,在2.5s之后完結(jié)挎袜,因為n$有了值;
(7)skip(count):忽略上游Observable對象的前count個數(shù)據(jù)肥惭,從第count+1個數(shù)據(jù)開始盯仪,上下游Observable對象保持一致了;若上游吐出的數(shù)據(jù)不夠count個蜜葱,則skip產(chǎn)生的Observable對象就會在上游完結(jié)時立刻完結(jié)全景;
3.轉(zhuǎn)化數(shù)據(jù)流
(1)map()
(2)switchMap():同一時間內(nèi)只維護一個內(nèi)部Observable對象;