You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:06:02