Rxjs运算符switchMap

时间:2017-08-23 03:35:29

标签: javascript rxjs

我是Rxjs的新手,并写了一些例子以便更好地理解。但是,下面的例子让我感到困惑,为什么输出为0和1?有人可以解释一下吗?

var sources = Rx.Observable.timer(1000,1000);
var higherOrder = sources.switchMap(val => Rx.Observable.of(val).delay(1000*val));
higherOrder.subscribe(x => console.log(x));

另外:

var sources = Rx.Observable.timer(1000,1000);
var higherOrder = sources.switchMap(val => Rx.Observable.of(val));
higherOrder.subscribe(x => console.log(x));

输出为:0 1 2 3 4 5 ...

1 个答案:

答案 0 :(得分:2)

一旦新的观察到达,

switchMap将放弃(取消订阅)先前发出的观察者。因此,最终您的值会延迟足够长的时间,以便您的计时器发出一个新值,为switchMap创建一个新的Observable,以便在检索其值之前订阅放弃前一个。