使用Observable.switch的混乱

问题描述 投票:0回答:1

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

有人可以解释吗?

rxjs5 rxjs-observables
1个回答
0
投票

现在我明白了。输出的差异来自以下事实:每个内部可观察序列(由对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
© www.soinside.com 2019 - 2024. All rights reserved.