buffer

作者: JamesSawyer | 来源:发表于2017-12-10 15:56 被阅读11次

    缓存操作符有几种形式:

    • bufferCount(countNum): 缓存多少数量之后emit,但是如果流结束,没有到达缓存数量也会emit, 以数组的形式返回
    • bufferTime(timer): 多长时间关闭一次缓存,单位为ms,例如 bufferTime(900), 表示900ms关闭一次buffer
    • buffer(observable): 根据提供的observable来缓存
    • bufferToggle: 暂时不讲
    • bufferWhen: 暂时不讲

    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'被缓存----此时a,b缓存数达到2个则emit---
    打印结果
    ['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关闭一个buffer
      -----------------a--------b--------c--------d--------e  
      --------!--------!--------!--------!--------!--------!     // 其中!的位置表示关闭buffer的时间点
    */
    
    var result = foo.zip(bar, (x, _) => x).bufferTime(900).subscribe(console.log);
    
    打印结果
    []
    ['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)
    
    // 打印结果 注意由于时间不精确可能导致结果的不准确性
    ['a']
    ['b', 'c']
    ['d', 'e']
    

    相关文章

      网友评论

          本文标题:buffer

          本文链接:https://www.haomeiwen.com/subject/elcvixtx.html