同步读取文件流

时间:2017-04-21 09:32:40

标签: javascript node.js parsing readline

我正在查看nodejs readline模块文档中的任务,我要逐行读取一个非常大的文件,看起来不错。但是对于我的特殊任务,我需要它同步读取行,即。无论怎样,第4行都不能在第4行之前读取,并且由于节点的性质,我只想确认这个代码是否安全 -

const readline = require('readline');
const fs = require('fs');

const rl = readline.createInterface({
  input: fs.createReadStream('sample.txt')
});

rl.on('line', (line) => {
  console.log(`Line from file: ${line}`);
});

如果没有,我应该使用/做什么?目前它对我有用,但我不知道它是否适用于大线,其中下一行可以比前一行解析得更快等。

1 个答案:

答案 0 :(得分:1)

我非常怀疑以后触发的回调可能比另一个更早执行。 基本上,它指的是event loop和过程的堆栈。

尽管如此,为了保证我可以建议实现与async/queue类似的功能,但能够动态推送回调。

假设你有类似的东西:

const Queue = require('./my-queue')
const queue = new Queue()

function addLineToQueue(line) {
  queue.push(function() {
    // do some job with line
    console.log(`Line: "${line}" was successfully processed!`)
  })
}

您将修改您的代码:

rl.on('line', (line) => {
  addLineToQueue(line)
  console.log(`Added line to queue: ${line}`)
})

确保您的队列实现应该从任何要执行的任务开始。这样就可以保证回调的顺序。但就我而言,它看起来有点开销。