Rxjs的zip和switchMap方法

1,Zip

将多个 Observable 组合以创建一个 Observable,该 Observable 的值是由所有输入 Observables 的值按顺序计算而来的。

如果最后一个参数是函数, 这个函数被用来计算最终发出的值.否则, 返回一个顺序包含所有输入值的数组.


Rx.Observable.zip(Rx.Observable.of(2),Rx.Observable.of(3)).subscribe(([a,b])=>console.log(a+'-'+b))  //输出2-3

2,switchMap

将每个源值投射成 Observable,该 Observable 会合并到输出 Observable 中, 并且只发出最新投射的 Observable 中的值。

返回的 Observable 基于应用一个函数来发送项,该函数提供给源 Observable 发出的每个项, 并返回一个(所谓的“内部”) Observable 。每次观察到这些内部 Observables 的其中一个时, 输出 Observable 将开始发出该内部 Observable 所发出的项。当发出一个新的内部 Observable 时,switchMap 会停止发出先前发出的内部 Observable 并开始发出新的内部 Observable 的值。后续的内部 Observables 也是如此。

返回:

Observable

该 Observable 发出由源 Observable 发出的每项应用投射函数 (和可选的 resultSelector)后的结果,并只接收最新投射的内部 Observable 的值。

示例一:

每次点击返回一个 interval Observable
var clicks = Rx.Observable.fromEvent(document, 'click');
var result = clicks.switchMap((ev) => Rx.Observable.interval(1000));
result.subscribe(x => console.log(x));

示例二:

Rx.Observable.of(2).switchMap((a)=>{console.log(a);return Rx.Observable.of(3)}).subscribe((b)=>console.log(b))   //输出2,3

猜你喜欢

转载自blog.csdn.net/weixin_39460408/article/details/80995242