如何在nodejs中产生按键检测?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在nodejs中产生按键检测?相关的知识,希望对你有一定的参考价值。

在我的nodejs应用程序中,我正在紧密循环中进行一些cpu密集型工作:

while(!isQuit) {
    doMyWork();
}

为了便于说明,doMyWork()是一种将随机数据写入文件的简单方法。

在代码的开头,我添加了逻辑来检查键盘按下:

var isQuit = false;
const readline = require('readline');
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);
process.stdin.on('keypress', (str, key) => {
  if (key.name === 'q') {
    isQuit = true;
  }
});

我的想法是当用户按下键盘上的“q”时退出我的处理。

问题是没有看到键盘按下。我认为这主要是因为我的紧密循环不会让键盘事件处理喘不过气来。

是否有一些函数调用我可以在我的紧密循环中进行以产生键盘事件处理?

或者,有没有办法重写我的while循环,以便doMyWork()不断异步调用,直到收到keypress事件?

答案

尝试an interval而不是循环。

let handle = setInterval(function(){
  if (isQuit) {
    clearInterval(handle);
  } else {
    doMyWork();
  }
}, 1);

这应该让stdin有机会进入事件循环。

以上是关于如何在nodejs中产生按键检测?的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView与js交互中产生的内存泄漏

如何在 1 种方法中产生 2 个块

如何检测 LWUIT 表单中的按键事件?

当任何数学运算在 .net 4 中产生“NaN”时,如何强制 C# 编译器抛出异常?

如何在 c 中产生 NaN 浮点数?

如何通过输入/答案在 Python 中产生打字效果?