javascript - 如何清除 .zip 队列?
问题描述
我基于 RxJS 制作了简单的“游戏循环系统”,我在其中请求各种参与者(包括用户)的操作并将它们与 .zip 运算符合并。
结果是一个基于回合的游戏循环,它只为动画和请求用户操作而暂停。
由于该系统,用户可以对多个操作进行排队,系统会将它们存储在 .zip 运算符中。但是,如果用户决定改变主意,我想清除那个“队列”。
我有一个小提琴:https ://jsfiddle.net/az5pthng/6/
想象一下,用户输入序列 a1、a2、a3、a4,然后考虑一秒钟并决定将序列更改为 b1、b2、b3、b4。然后再想一想,输入 c1、c2、c3、c4。
目前我有这个输出,显示每个按键都被记录和播放:
(3) ["A", "B", "a1"]
(3) ["A", "B", "a2"]
1100
(3) ["A", "B", "a3"]
(3) ["A", "B", "a4"]
1723
(3) ["A", "B", "b1"]
(3) ["A", "B", "b2"]
(3) ["A", "B", "b3"]
(3) ["A", "B", "b4"]
(3) ["A", "B", "c1"]
(3) ["A", "B", "c2"]
(3) ["A", "B", "c3"]
(3) ["A", "B", "c4"]
但我想要这个输出,表明每当 queueTime$ 发出一个值时 - queue$ 都会用新值“重置”:
(3) ["A", "B", "a1"]
(3) ["A", "B", "a2"]
1100
(3) ["A", "B", "b1"]
(3) ["A", "B", "b2"]
1700
(3) ["A", "B", "c1"]
(3) ["A", "B", "c2"]
(3) ["A", "B", "c3"]
(3) ["A", "B", "c4"]
两个流 - Turn 和 Q
Turn 应该以某种方式请求 A 和 B 并等待 Q 提供它的值,如果有的话。当 Q 提供值时,Turn 等待一段时间然后重复。然而,Q 会按时间打破它的值(我猜是在 .window 的帮助下?),如果有新序列进入,则丢弃任何未发送到 Turn 的值。
解决方案
不确定我是否正确理解您的问题,但如果您想推迟触发队列(因为用户可能会改变他/他的想法,那么您可以使用debounceTime(1000),其中 1000 以毫秒为单位。
如果您想清除队列可以使用具有distinctUntilChanged的相同运算符来识别更改并执行您想做的任何事情!希望对您有所帮助
推荐阅读
- sql-server - 将粘贴问题从 ssms 2012 复制到 Excel
- reactjs - 用 state 初始化 redux 表单控件到 props
- python - 如何在底图图中的栅格字段周围绘制线边框?
- c - 在 Windows C 编程中使用 CONTEXT 结构时,CONTEXT_CONTROL 的含义是什么?
- sql - 在 SQL 中连接多个表 - 最佳实践
- php - 如何在jQuery中用Font Awesome替换Delete word
- arrays - 将字符串数组保存到 CoreData
- ubuntu - 是什么原因导致 Magento Cloud CLI 帐户登录不断失败?
- vue.js - dist 文件夹内容仅适用于服务器的根目录
- android - Firebase Google Analytics 与自定义 FirebaseOptions 初始化方法