gpt4 book ai didi

javascript - 使用 RxJS 将事件排队,每 350 毫秒触发一次

转载 作者:行者123 更新时间:2023-12-03 00:42:16 25 4
gpt4 key购买 nike

我有一个导致动画播放的键盘事件。用户可能会产生比动画播放速率更多的事件,因此我想创建一个队列,该队列最终会在一定的延迟后一个接一个地清空。

所需的大理石图:

=================================================

user: START|a-b-c-----------------------------

result: START|-350ms--a--350ms--b--350ms--c-----

=================================================

用户快速触发 3 个事件 (a b c)。事件 a 触发后,350ms 计时器启动。该计时器结束后,result 会触发 a 并启动另一个 350 毫秒计时器。计时器完成后,它会触发 b。基本上,如果计时器正在进行中,我想将其添加到队列中并稍后发出。速率不能超过 350 毫秒,我想要每个事件。

我想将事件的输出限制为 350 毫秒,但我不想使用 throttle 运算符,因为我不想丢失任何事件(我想要 abc 来触发)。

首选 Javascript RxJS 解决方案,但我会接受任何语言的 Rx 运算符的任何答案。

最佳答案

这似乎可以解决问题:

import { fromEvent, concat, timer } from 'rxjs';
import { tap, concatMap, filter } from 'rxjs/operators';

fromEvent(document, 'keypress')
.pipe(
filter((e: KeyboardEvent) => e.code === 'Space'),
concatMap(() => timer(350))
).subscribe(console.log)

Blitz

<小时/>

编辑:concat() 运算符是多余的。已删除。

关于javascript - 使用 RxJS 将事件排队,每 350 毫秒触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53400127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com