如何使用Readline模块在读取完数组所有行后执行指定代码
解决方案
标准高效实现(监听close事件)
close是readline模块原生提供的结束信号,当输入流被关闭(比如管道输入完毕、用户按下终止快捷键、手动调用close方法)时触发,此时所有line事件已经执行完毕,数组已经收集到了全部输入行,是没有额外性能开销的官方标准实现。
完整示例代码如下:
const readline = require('readline'); const r = readline.createInterface({ input: process.stdin, output: process.stdout }); const arr = []; r.on('line', (line) => { arr.push(line); // 每行读取时的临时逻辑可写在这里,不需要可以留空 }); // 所有行读取完成后自动触发 r.on('close', () => { // 你的目标代码写在这里,此时arr已经是完整的输入数组 console.log('读取完成,完整数组内容:', arr); });
该方案适配管道输入场景,比如执行cat 你的输入文件.txt | node 脚本.js时,文件内容读完会自动触发close事件;手动输入场景下,输入完成后按Ctrl+D(Windows系统按Ctrl+Z)即可触发结束。
交互式场景自定义结束标识
如果是给用户提供交互式输入能力,希望用户输入完所有内容后主动触发结束,可以在line事件中添加自定义结束规则,比如约定输入end、空行等作为结束信号,匹配后手动调用r.close()触发后续逻辑,示例如下:
const readline = require('readline'); const r = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: '请逐行输入内容,输入end结束输入:\n' }); const arr = []; r.prompt(); r.on('line', (line) => { const input = line.trim(); // 匹配到结束标识,关闭readline触发后续逻辑 if (input === 'end') { r.close(); return; } arr.push(input); r.prompt(); }); r.on('close', () => { console.log('输入完成,你输入的数组为:', arr); process.exit(0); });
内容的提问来源于stack exchange,提问作者MZr
相关产品推荐
相关产品推荐

