【问题标题】:Repeat on an BehaviorSubject在 BehaviorSubject 上重复
【发布时间】:2022-12-03 01:38:06
【问题描述】:

我想以固定的时间间隔重新发出我的可观察值的最后一个值,我试过

obs.pipe(repeat({delay:1000})).subscribe(x => console.log('Emitted', x));

但它没有用。对此进行调查后,我的可观察对象实际上是一个 BehaviorSubject。

所以我的问题是为什么第一个每秒发出一次

of('Observable').pipe(repeat({ delay: 1000 })).subscribe(x => console.log(x));

但不是这个?

var bs = new BehaviorSubject('BehaviorSubject');
bs.pipe(repeat({ delay: 1000 })).subscribe(x => console.log(x));

如何使用我的 BehaviorSubject 来做到这一点?

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    如果你想重复一个 BehaviorSubject 发出的最后一个值,你可以使用 shareReplay 运算符而不是 repeat 运算符。此运算符允许您指定缓冲区大小,并且它将维护指定大小的缓冲区,其中包含源可观察对象发出的值。这意味着订阅 shareReplay 返回的可观察对象的任何新观察者将立即收到缓冲区中的值。

    下面是一个示例,说明如何将 shareReplay 运算符与 BehaviorSubject 一起使用,以固定间隔重复主题发出的最后一个值:

    const bs = new BehaviorSubject('BehaviorSubject');
    const shared = bs.pipe(shareReplay(1));
    
    // Emit the last value from the behavior subject every second
    interval(1000).pipe(
      switchMap(() => shared)
    ).subscribe(x => console.log(x));
    
    // Emit a new value to the behavior subject every 5 seconds
    interval(5000).subscribe(x => bs.next(x));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-07
      • 2018-02-12
      • 2018-02-08
      • 2017-07-16
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多