我的 Angular 4 前端有一个使用可观察订阅的 websocket 连接。当 observable 在短时间间隔内非常快速地接收数据时,前端会滞后并完全阻塞。
有没有办法缓冲接收到的数据并在每个事件之间延迟执行 next
事件处理程序?或达到相同效果的其他某种解决方案。我基本上需要放慢 next
事件的处理速度,但又不会错过任何数据。
我看过 throttle功能,但跳过数据,我不想要那个。我正在寻找类似的东西,它允许所有数据通过但延迟运行事件处理程序。
最佳答案
减缓快速移动的流通常被称为“背压”。 https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/backpressure.md 上有一篇很好的(如果有点过时)文章.
在您的特定情况下,您说过不想丢失任何数据,因此您需要使用“无损失”背压方法,例如 buffer
或 窗口
。从你所说的听起来 buffer
就是你所追求的。您可以使用带有“关闭选择器”的 buffer
来确定何时关闭缓冲区并启动新缓冲区。
关于javascript - 可观察的订阅无法以非常短的间隔处理连续传入的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49352659/