node.js - 如何在nodejs中屈服于按键检测?

标签 node.js

在我的 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() 不断被异步调用,直到收到按键事件?

最佳答案

尝试an interval而不是循环。

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

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

关于node.js - 如何在nodejs中屈服于按键检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55733234/

相关文章:

sql - postgresql 转义引号仍然在数据库中转义

javascript - Socket.io 未发出超过 1 个事件

node.js - 从 npm : no such option --no-parallel 安装 ctags

javascript - 使用 node.js 的 Socket.io 根本没有表达?

javascript - Office365 IMAP 访问 : User is Authenticated but not Connected

node.js - 如何从 Node.js 中的错误中获取行名和文件名?

node.js - Firebase 无效的文档引用。文档引用必须有偶数个段

angularjs - 如何正确让 Apache 代理 NodeJS?

node.js - Node 和快速路由 - 404 错误

javascript - node.js child_process.spawn 没有标准输出,除非 'inherit'