withLatestFrom

2017-12-10  本文已影响23人  JamesSawyer

这个操作符是一种 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时间的误差,会产生不同的结果, 但是理论情况如上

上一篇下一篇

猜你喜欢

热点阅读