在我的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()一直被异步调用,直到收到按键事件为止?
答案 0 :(得分:1)
尝试an interval而不是循环。
let handle = setInterval(function(){
if (isQuit) {
clearInterval(handle);
} else {
doMyWork();
}
}, 1);
这应该使stdin有机会进入事件循环。