Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何限制服务器事件?_Angular_Typescript_Asynchronous_Rxjs - Fatal编程技术网

Angular 如何限制服务器事件?

Angular 如何限制服务器事件?,angular,typescript,asynchronous,rxjs,Angular,Typescript,Asynchronous,Rxjs,我有一个angular 6应用程序,它通过websocket(更准确地说是sockjs)与服务器进行通信。 我用服务器启动一个任务,REST调用,然后在websocket上收到大量消息。 我的代码的工作方式很糟糕。只要有websocket消息出现,它基本上会锁定屏幕 我当前的代码是组件 this.scenarioRunnerService.liveUpdate$ .subscribe(response => { this.processLiveUpdates(response.pa

我有一个angular 6应用程序,它通过websocket(更准确地说是sockjs)与服务器进行通信。 我用服务器启动一个任务,REST调用,然后在websocket上收到大量消息。 我的代码的工作方式很糟糕。只要有websocket消息出现,它基本上会锁定屏幕

我当前的代码是组件

this.scenarioRunnerService.liveUpdate$
.subscribe(response => {
    this.processLiveUpdates(response.payload);
})
服务代码为

StompClientKeeper.getInstance().get()
.subscribe('/topic/abcd',
    (response: Response) => broadcast the new message);

如何更改此设置以不冻结客户端?

如果您想在某些消息太快到达时忽略它们,则操作员可能就是您要查找的:

import { auditTime } from "rxjs/operators";

this.scenarioRunnerService.liveUpdate$.pipe(
  auditTime(400)
).subscribe(response => {
  this.processLiveUpdates(response.payload);
});
如果在指定的持续时间内收到多条消息,
auditTime
操作员将忽略除最后收到的消息以外的所有消息

或者,您可以使用操作员。它的行为不同之处在于,它将传递第一条接收到的消息,并限制在指定持续时间内接收到的后续消息

操作员是另一种可能性。它又不同了,因为它会在指定的时间段对接收到的消息进行采样


选择哪种运算符取决于您想要的行为。

答案取决于您是否想要有损解决方案。是否要忽略某些消息?我可以忽略其中任何消息以及
subscribe
提示,这可能涉及RxJS。是吗?不跟随你的评论,只是寻找一种避免应用程序锁定的方法是代码段中的
subscribe
调用,因为
liveUpdate$
是可以观察到的RxJS吗?这个问题没有标记为
rxjs
。我将尝试sampleTime,我认为它最适合我的情况。非常感谢。