在我的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一个机会进入事件循环。

07-28 09:09