使用 rxjs 重放事件或者如何使用带有滴答时间而不是挂钟时间的 rxjs

问题描述

我正在考虑使用响应式编程,特别是 rxjs,在我需要处理的大型事件流之上构建逻辑。

这涉及做很多与时间相关的事情,例如每秒生成一个合成事件。 (人为的例子)

当事件实时进入时(即事件是使用挂钟时间处理的),这很容易通过将 merging 插入到事件流中的间隔源来解决。来自上述链接

    // RxJS v6+
    import { mapTo } from 'rxjs/operators';
    import { interval,merge } from 'rxjs';

    //emit every 2.5 seconds
    const first = interval(2500);
    //emit every 2 seconds
    const second = interval(2000);
    //emit every 1.5 seconds
    const third = interval(1500);
    //emit every 1 second
    const fourth = interval(1000);

    //emit outputs from one observable
    const example = merge(
      first.pipe(mapTo('FirsT!')),second.pipe(mapTo('SECOND!')),third.pipe(mapTo('THIRD')),fourth.pipe(mapTo('FOURTH'))
    );
    //output: "FOURTH","THIRD","SECOND!","FOURTH","FirsT!","FOURTH"
    const subscribe = example.subscribe(val => console.log(val));

然而,我经常需要重放事件流,并以适当的顺序将合成事件合并到这个流中。即:每个事件都有一个时间戳,合成事件需要正确放置在事件流中,以便生成的合并事件流的时间戳保持(单调)增加。 (即使用滴答时间处理事件)

这是按滴答时间顺序合并 N 个事件流的更通用问题的一个特定案例。

理想情况下,无论挂钟时间或滴答时间如何,我都会编写反应式逻辑。然后我会用一些上下文来初始化 rxjs,表示我们处于挂钟时间或滴答时间,如果是后者,则指向带有时间戳的事件属性。 Rxjs 会整理剩下的,不需要处理自定义代码中的差异。

非常感谢任何指针

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...