【问题标题】:RxJs: delay onNext for some values with?RxJs:延迟 onNext 某些值?
【发布时间】:2016-02-11 07:08:30
【问题描述】:

有没有办法为某些值延迟 onNext?例如:

let subject = new Rx.BehaviorSubject({value: 100})
subject.onNext({ value: 123})
subject.onNext({ value: 999})
subject.onNext({ value: 120})  // could this be delayed with 500ms before being delivered to subscribers?

可能的选择:

  • 使用不同的主题,一个有延迟,另一个没有(但我想避免这种情况)
  • 使用 delayWithSelector(它不包含在 rx.lite.js 中,因此不是一个选项)
  • 通过 setTimeout(() => subject.onNext({value:123}), 500) 进行操作(看起来不是 Reactive)

【问题讨论】:

    标签: javascript rxjs


    【解决方案1】:

    我认为最简单的方法是只使用 flatMap 可观察对象并发出延迟的对象。

    像这样:

    const {Observable} = Rx;
    
    const source = Observable.interval(500)
      .flatMap((e) => {
        if (e % 2 === 0) {
          return Observable.of(e)
            .delay(2000);
        }
        else {
          return Observable.of(e); 
        }
      });
    
    source
      .subscribe(e => console.log(e));
    

    这会给你这样的结果:

    "1, 3, 0, 5, 2, 7, 4, 9, 6"
    

    更容易理解:

    - = 250ms
    -------- = 2000ms
    
    interval(500)
    0-1-2-3-4-5-6-7-8-9-(10)
    
    .flatMap(...)
    --------0---2---4---6
    --1---3---5---7---9--
    
    source (interval().flatMap())
    --1---3-0-5-2-7-4-9-6
    

    【讨论】:

    • 我如何以这种方式将 flatMap 与 Subjects 一起使用?没有我需要的“间隔”或初始值
    • 主题是可观察的。您可以对它们应用与区间创建的 Observable 相同的运算符。
    猜你喜欢
    • 2018-10-17
    • 2017-07-27
    • 2018-08-31
    • 2017-05-15
    • 2021-10-05
    • 1970-01-01
    • 2020-03-20
    • 2017-08-12
    • 2019-10-08
    相关资源
    最近更新 更多