【问题标题】:How could I create Cold Subject in RxJS?如何在 RxJS 中创建冷主题?
【发布时间】:2016-10-09 19:01:41
【问题描述】:

默认情况下 RxJs Subject 是“Hot”,但是否可以创建“Cold" 主题获取从一开始就从它传播的所有值?

即:

let s = new Subject();
s.next(1);
s.next(2);
s.subscribe(n => console.log(n)); //to get here 1 2 3
s.next(3);

【问题讨论】:

    标签: rxjs5


    【解决方案1】:

    您可以使用 ReplaySubject 来执行此操作。要记住的一件事是 ReplaySubject 在创建期间需要一个数字来知道它应该缓冲多少值。您不能缓冲所有元素。

    const subject = new Rx.ReplaySubject(10);
    
    subject.next("1");
    subject.next("2");
    subject.next("3");
    subject.next("4");
    subject.next("5");
    
    subject.subscribe(
      (val) => console.log(val)
    );    
    
    subject.next("6");
    
    // Logs out 
    // 1
    // 2
    // 3
    // 4
    // 5
    // 6
    

    jsbin:http://jsbin.com/rocofa/edit?js,console

    【讨论】:

    • 您不必提供缓冲区大小。如果没有提供,它将默认为Math.pow(2, 53) - 1
    【解决方案2】:

    ReplaySubject 的行为与您描述的完全一样。有关详细信息,请参阅ReactiveX Subject docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 2021-05-28
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多