使用enquirer npm选择模式后无法处理标准输入的解决方案咨询
问题原因
enquirer 的选择交互组件执行完成后会自动暂停标准输入流(process.stdin),同时移除自身绑定的事件监听,但不会主动恢复流的可读状态,因此后续绑定的按键监听无法收到输入事件,程序没有等待的事件就会直接退出。
修复方案
只需要在进入练习模式之前,先清空 enquirer 残留的事件监听、恢复标准输入流即可,修改代码中 prompt.run() 的 then 逻辑:
prompt.run() .then(answer => { switch (answer) { case this.practiceMode: // 新增以下两行修复代码 process.stdin.removeAllListeners('keypress') process.stdin.resume() new PracticeMode().start() break; case this.showPiDigits: break; case this.highScores: break; } })
代码说明
process.stdin.removeAllListeners('keypress'):清除 enquirer 绑定在标准输入上的残留按键监听,避免和自定义的监听逻辑冲突process.stdin.resume():恢复被 enquirer 暂停的标准输入流,让流重新进入可读状态,绑定的按键事件才能正常触发
修改完成后运行程序,选择练习模式即可正常接收用户输入,和直接调用 PracticeMode 的效果完全一致。
内容的提问来源于stack exchange,提问作者unstoppa61e
相关产品推荐
相关产品推荐

