如何解决使用 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 举报,一经查实,本站将立刻删除。