使用Observable.switch时的困惑


github上的switch文档包含了一个关于如何使用该命令的示例。
var source = Rx.Observable.range(0, 3)
.select(function (x) { return Rx.Observable.range(x, 3); })
.switch();
var subscription = source.subscribe(
function (x) {
console.log('Next: ' + x);
},
function (err) {
console.log('Error: ' + err);
},
function () {
console.log('Completed');
});

我已经在stackblitz上测试了代码,但输出不同。代替

Next: 0
Next: 1
Next: 2
Next: 3
Next: 4
Completed 

控制台记录

Next: 0
Next: 1
Next: 2
Next: 1
Next: 2
Next: 3
Next: 2
Next: 3
Next: 4
Completed

有人能解释一下吗?

现在我得到了。输出中的差异来自于这样一个事实,即每个内部可观测序列(由对range的第二次调用创建(不会按照开关运算符的指定被取消,因为每个可观测序列都是在接收到下一个序列之前发出的,即在开关有机会取消之前该序列中完成的可观测序列。但是,如果我延迟发射,只有的元素

最新内部可观察序列

记录到控制台:

var source = Rx.Observable
.range(0, 3)
.map(x =>  Rx.Observable.range(x, 3).delay(1))
.switch();
var subscription = source.subscribe(
function (x) {
console.log('Next: ' + x);
},
function (err) {
console.log('Error: ' + err);
},
function () {
console.log('Completed');
}); 

输出:

Next: 2
Next: 3
Next: 4
Completed

最新更新