我正在查看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}`);
});
如果没有,我应该使用/做什么?目前它对我有用,但我不知道它是否适用于大线,其中下一行可以比前一行解析得更快等。
答案 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}`)
})
确保您的队列实现应该从任何要执行的任务开始。这样就可以保证回调的顺序。但就我而言,它看起来有点开销。