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

Node.js中如何检测readline实例是否已关闭

Node.js readline 未关闭状态检测与主动关闭实现

你参考的写法存在一个基础问题:Node.js 官方 readline 模块的 Interface 实例没有对外暴露isClosed这个公开属性,直接访问会得到undefined,导致判断逻辑完全失效。

下面是两种可直接用的实现方案:

  • 兼容全版本稳妥方案:自行维护关闭状态标记
    初始化readline实例时同步声明状态变量,监听close事件实时更新状态,判断逻辑和你预期的写法完全一致:
    const readline = require('readline');
    const rl = readline.createInterface({
      input: process.stdin,
      output: process.stdout
    });
    
    // 维护关闭状态
    let isClosed = false;
    rl.on('close', () => {
      isClosed = true;
    });
    
    // 关闭检测逻辑
    if(!isClosed){
      rl.close()
    }
    
  • 高版本Node.js简洁方案:使用官方公开的closed属性
    Node.js 14.0.0及以上版本为readline Interface实例提供了只读的closed布尔属性,直接调用即可判断状态,不需要自己维护变量:
    if(!rl.closed){
      rl.close()
    }
    

注意:不要使用实例上下划线开头的内部属性(比如_closed)做判断,这类属性属于模块内部实现,没有兼容性承诺,可能在任意版本迭代中被改名或删除。
重复调用rl.close()本身不会抛出致命错误,但提前做状态判断可以避免多余的事件触发和无效逻辑执行。

内容的提问来源于stack exchange,提问作者NRD moment

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:51:23