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