【发布时间】:2022-01-01 17:44:28
【问题描述】:
我正在尝试在循环中不断添加数字,如下面的代码所示:
const readline = require('readline');
const askOnCommandLine = (question) =>
new Promise((resolve) => {
const p = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: question,
});
p.on('line', (input) => {
resolve(input);
});
p.prompt();
});
let counter = 0;
(async () => {
while (true) {
console.log('Loop:', counter);
const number1 = await askOnCommandLine('Enter 1st number: ');
const number2 = await askOnCommandLine('Enter 2nd number: ');
console.log('Addition:', parseInt(number1) + parseInt(number2));
counter += 1;
}
})();
但是这里有两个问题:
- 它会多次打印单个按键,如屏幕截图所示。
- 循环几次后,出现如下错误:
Enter 2nd number:
(node:706492) MaxListenersExceededWarning: Possible EventEmitter memory leak detected.
11 end listeners added to [ReadStream]. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
【问题讨论】:
-
您多次调用
readline.createInterface()却没有完成之前的调用。p.close()将关闭前一个,因此您可以在同一流上打开多个。但是,实际上,您通常不会在每次想问下一个问题时都创建一个新界面。这就是rl.prompt()或rl.question()的用途。
标签: node.js command-line-interface readline nodejs-stream