緩存操作符有幾種形式:
-
bufferCount(countNum)
: 緩存多少數(shù)量之后emit,但是如果流結(jié)束哩都,沒有到達(dá)緩存數(shù)量也會emit, 以數(shù)組的形式返回 -
bufferTime(timer)
: 多長時(shí)間關(guān)閉一次緩存先巴,單位為ms嗡综,例如 bufferTime(900), 表示900ms關(guān)閉一次buffer -
buffer(observable)
: 根據(jù)提供的observable來緩存 -
bufferToggle
: 暫時(shí)不講 -
bufferWhen
: 暫時(shí)不講
bufferCount
示例
var source = Rx.Observable.of('a', 'b', 'c', 'd', 'e')
.zip(Rx.Observable.interval(1000).take(7))
.bufferCount(2)
.subscribe(console.log)
# marble圖
/*
(abcde|)
----0----1----2----3----4----5----6|
zip
----a----b----c----d----e|
bufferCount(2)
---------(['a', 'b'])----------(['c', 'd'])----(['e']|)
----此處'a'被緩存----此時(shí)a,b緩存數(shù)達(dá)到2個(gè)則emit---
打印結(jié)果
['a', 'b']
['c', 'd']
['e']
bufferTime
示例
var foo = Rx.Observable.of('a', 'b', 'c', 'd', 'e')
var bar = Rx.Observable.interval(1000).take(6);
/*
(abcde|) (foo)
---------0---------1---------2---------3---------4---------5| (bar)
zip
---------a---------b---------c---------d---------e|
bufferTime(900) 每900ms關(guān)閉一個(gè)buffer
-----------------a--------b--------c--------d--------e
--------!--------!--------!--------!--------!--------! // 其中!的位置表示關(guān)閉buffer的時(shí)間點(diǎn)
*/
var result = foo.zip(bar, (x, _) => x).bufferTime(900).subscribe(console.log);
打印結(jié)果
[]
['a']
['b']
['c']
['d']
['e']
buffer
var bar = Rx.Observable.interval(600).take(6);
var goo = Rx.Observable.interval(900).take(3)
/*
(abcde|) (foo)
----0----1----2----3----4----5| (bar)
zip
----a----b----c----d----e|
buffer(goo)
--------0--------1--------2|
--------!--------a--------b--------c--------d----e|
*/
var result = foo.zip(bar, (x, _) => x).buffer(goo);
result.subscribe(console.log)
// 打印結(jié)果 注意由于時(shí)間不精確可能導(dǎo)致結(jié)果的不準(zhǔn)確性
['a']
['b', 'c']
['d', 'e']