【问题标题】:Confusion using Observable.switch混淆使用 Observable.switch
【发布时间】:2020-08-10 23:42:06
【问题描述】:

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】:

    现在我明白了。输出的不同之处在于每个内部可观察序列(由第二次调用 range 创建)不会按照开关操作符的指定被取消,因为每个可观察序列都是在接收到下一个序列之前发出的,即该序列中的可观察对象在 switch 有机会取消它们之前完成。但是如果我只延迟发射

    最近的内部可观察序列

    已记录到控制台:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-24
      • 2021-08-10
      • 2013-02-19
      • 2023-02-04
      • 2012-08-30
      • 2019-12-08
      • 1970-01-01
      • 2017-01-10
      相关资源
      最近更新 更多