我创建了此函数以从标准输入中读取多行:
async function readLines() {
const io = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
const lines = [];
io.on('line', line => lines.push(line));
let endOfFile;
io.on('close', () => endOfFile(lines));
return new Promise(resolve => endOfFile = resolve);
}
当我这样多次调用此函数时:
(async () => {
console.log(await readLines());
console.log(await readLines());
})().catch(console.error);
,然后尝试按Ctrl+D
结束行的阅读,
只有第一个调用从标准输入中读取,所有后续调用都将被忽略。
是否有可能以某种方式重新打开标准输入以能够多次调用此函数?
或者,以另一种方式问:为什么在按下Ctrl+D
组合键之后,node.js会关闭标准输入?
在按下Ctrl+D
之后,其他语言(如ruby或python)允许从标准输入中读取。例如,以下用ruby编写的代码可以按预期工作:
def read_lines
lines = []
while line = gets
lines << line.chomp
end
lines
end
pp read_lines
pp read_lines
为什么node.js的行为有所不同?