美文网首页
withLatestFrom

withLatestFrom

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

    这个操作符是一种 AND 操作符,就是将2个流合并成一个流,根据其作用实际上可以称之为 mapWithLatestFrom

    根据一个流最新的值来对另一个流进行处理

    示例
    根据bar的最新值来将foo中的制服进行转换,如果bar最新的值是1,则将foo中的字符转换为大写,其余的情况转换为小写形式

    // zip的作用是将一个立即完成的流转换为与时间相关的流
    var foo = Rx.Observable.interval(500).take(5)
      .zip(Rx.Observale.of('H', 'e', 'l', 'l', 'o'), (_, c) => c);
    
    var bar = Rx.Observable.interval(300).take(7)
      .zip(Rx.Observale.of('0', '1', '0', '1', '0', '1', '0'), (_, n) => n);
    
    var result = foo.withLatestFrom(bar, (c, n) => n === 1 ? c.toUpperCase() : c.toLowerCase());
    
    // marble图
    /*
      ----H----e----l----l----o|         (foo)
      --0--1--0--1--0--1--0|             (bar)
        withLatestFrom((c, x) => x === 1 ? c.toUpperCase() : c.toLowerCase())
      ----h----e----l----L----0|  
    */
    
    
    result.subscribe(console.log)
    
    打印结果
    h
    e
    L
    L
    o
    

    注意实际情况会因为interval时间的误差,会产生不同的结果, 但是理论情况如上

    相关文章

      网友评论

          本文标题:withLatestFrom

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