javascript - 缓冲条形码扫描仪的击键

标签 javascript reactive-programming rxjs

我需要从条形码扫描仪获取输入,它的工作原理与键盘完全相同,只是它的“输入”速度要快得多。 没有分隔符,没有行结束符。几乎没有办法比较标量值 - 用户输入的任何内容都可能看起来与条形码完全相同。

我想 Rx 是可能的,因为条形码扫描速度比任何用户输入的速度都要快。

如何从 document.keypress 事件创建一个 Observable 来区分用户输入和条形码扫描仪的输入? 我猜想每当按键“突发”然后暂停时,它应该以某种方式缓冲/窗口值。

这样做,仍然没有帮助:

Rx.Observable.fromEvent(document, 'keypress')
                .bufferWithTime(1500)
                .filter((x)=> _.isNotEmpty(x) && x.length > 5)

它只是每隔半秒抓取一次输入的内容。 你们能帮我解决这个问题吗?

最佳答案

在当前版本的代码中,您还可以使用 timeInterval 来避免自己操作时间戳:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/timeinterval.md , http://reactivex.io/documentation/operators/timeinterval.html

但是,在我看来,这里更好的想法实际上是使用带有关闭选择器的 buffer 运算符。您的关闭选择器可以使用 debounce 运算符。比照。 https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/debounce.md

基本上,当 Xms 之后没有发出更多键时,您会关闭缓冲区(类似于 source.buffer(function(){return source.debounce(Xms)}))。所以你会有一个可观察的数组(缓冲区)。您应该仔细选择去抖超时,以便当用户按键时数组大小为 1,当扫描仪输入时数组大小为 >1。例如,我的正常打字速度是每分钟 247 次按键。

使用带有关闭选择器的buffer运算符的示例:Smarter buffers

关于javascript - 缓冲条形码扫描仪的击键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816893/

相关文章:

javascript - JS 中的 react 流如何工作?

javascript - Jasmine 监视 RxJS 5.5 运算符

angular - 解决超过 6 个 forkJoin 参数的问题?

javascript - Vee-validate 独立验证来自父级的组件,无需使用 EventBus

javascript - 如何防止我的内容区域移动

c# - 如何使用 Reactive Extensions 解析来自串口的字符流?

javascript - 使用 RxJS 组合函数/运算符

angular - 当插入子组件时数组不会更新,在 Angular Behaviour 中将父级数据传递到子级中

javascript - ReactJS:加载组件时 'type is undefined'

javascript - 标记不显示在谷歌地图 API 上