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

使用readline.createInterface读取文件时出现行丢失的异常问题

原因分析
  • 核心矛盾在于可读流的自动流动特性与异步操作的时序冲突:
    1. 调用createReadStream创建流后,Node.js默认将流设为「流动模式」——会自动读取文件内容并触发data事件。
    2. 创建readline接口后,并没有立即启动数据消费(for await...of还未执行)。此时流触发的data事件没有被处理,Node.js的默认行为是直接丢弃这些未被监听的数据。
    3. await fs.readFile(...)会让主线程暂停处理当前流,转而读取另一个文件。这段时间内,输入流已经读取了大量数据并触发data事件,但这些数据因为没有被readline及时处理而丢失。
    4. 当for await...of开始迭代时,readline只能从流的当前位置继续读取,之前丢失的数据无法被计数,因此结果小于预期值;又因为每次fs.readFile的耗时和流读取速度存在波动,最终输出结果不稳定。
  • 移除fs.readFile后,for await...of会立即启动,readline会及时捕获并处理流的所有data事件,所有数据都被正确计数,因此结果稳定为100000。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:01:44