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