javascript - RxJs:为某些值延迟 onNext?

标签 javascript rxjs

有没有办法延迟某些值的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)

最佳答案

我认为最简单的方法是只使用 flatMap observables 并发出延迟的。

像这样:

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

关于javascript - RxJs:为某些值延迟 onNext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35332866/

相关文章:

angular - 如何使用服务和可观察的组件之间共享数据?

rxjs - .unsubscribe 和 .take(1) 之间的区别

typescript - Angular 2 : mouse event handling (movement relative to current position)

javascript - 在 JavaScript 中对数字进行因式分解

javascript - 使用 jQuery 切换表格行

javascript - 拉斐尔拖放

javascript - 我怎样才能将一个可观察对象变成一个由长轮询可观察对象组成的可观察对象,这些可观察对象在特定值上完成?

angular - method VS () => method() - Angular 2 done() 回调函数订阅 Observable RxJS

javascript - 如何在 Ajax 请求中发送当前页码

javascript - 如何访问返回的json对象的属性? (AngularJS)