微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?