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
相关产品推荐
相关产品推荐

