Javascript 如何清除.zip队列?

Javascript 如何清除.zip队列?,javascript,rxjs,game-loop,Javascript,Rxjs,Game Loop,我已经基于RxJS制作了一个简单的“游戏循环系统”,在这个系统中,我请求来自不同角色(包括用户)的操作,并将它们与.zip操作符合并 结果是一个基于回合的游戏循环,该循环仅为动画和请求用户动作而暂停 由于该系统,用户可以将多个操作排队,系统将它们存储在.zip操作符中。然而,如果用户决定改变主意,我想清除那个“队列” 我有一把小提琴: 假设用户输入序列a1、a2、a3、a4,然后思考一秒钟,决定将序列更改为b1、b2、b3、b4。然后再想想,类型c1,c2,c3,c4 目前我有这个输出,显示每个

我已经基于RxJS制作了一个简单的“游戏循环系统”,在这个系统中,我请求来自不同角色(包括用户)的操作,并将它们与.zip操作符合并

结果是一个基于回合的游戏循环,该循环仅为动画和请求用户动作而暂停

由于该系统,用户可以将多个操作排队,系统将它们存储在.zip操作符中。然而,如果用户决定改变主意,我想清除那个“队列”

我有一把小提琴:

假设用户输入序列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"]
编辑:以下是我正在尝试的图片:

两条流-转弯和Q


Turn应该以某种方式请求A和B,并等待Q提供它的值(如果有)。当Q提供值时,Turn等待一段时间,然后重复。Q、 但是,如果有新的序列出现,则按时间(我想是在.window的帮助下)打断它的值,并丢弃任何未发送到Turn的值。

不确定我是否正确理解您的问题,但如果您希望延迟触发队列(因为用户可能会改变主意,那么您可以使用where 1000 in ms.
如果您想清除队列,您可以使用相同的运算符来识别更改并执行您想执行的操作!
希望这对我有所帮助。

我做到了!虽然我觉得这不是RxJS的方式,但至少它可以按照我的要求工作。如果你有更好的解决方案,请发表文章,我对“流外”变量和标志不太满意

我的方法是自己管理队列。每当我需要输入时,我都会有一个标志——如果整个链都在等待输入,则是真的,否则不是。根据该标志,我可以将按下的键放入队列或直接发送到链

input$.subscribe(({value, interval}) => {
    if (waitingForInput) {
    queue$.next(value);
    waitingForInput = false;
  } else {
    if (interval < DEBOUNCE_TIME) {
        queue.push(value);
    } else {
        queue.length = 0;
        queue.push(value);
    }
  }
});

代码如下:

这是求职面试的编码挑战吗?@cgTag不可能,这是我想要实现“智能”的流氓游戏rx-powered turns,我收集所有实体动作,然后立即处理它们。你可能会将其视为自我强加的编码挑战,因为我想了解rx并使其服从我的意愿。我不想推迟队列。我的问题是我有队列,它应该比其他可观察到的生成值,并且在某个时候我想重新生成例如:用户按A、B、C、D等待1.5秒,e、F、G。我希望立即发送,然后在1秒后按B,(在.5秒后用户按e),所以在1秒后-它应该丢弃C和D并生成E。问题是要么有
.forkJoin
或者
.switchMap
或者其他什么-我的队列不存储值。或者我有.zip-但是我不知道如何让我的队列丢弃值
// Request action from other entites
const requestAction = (x) => Rx.of(x);
// Request action from player
const requestQueueAction = () => {
    if (queue.length > 0) {
    return Rx.of(queue.shift());
  } else {
    waitingForInput = true;
    return queue$.pipe(op.take(1));
  }
}