逐行同步读取文件流
read file stream line by line synchronously
我正在查看 nodejs readline 模块文档的任务,我必须逐行读取一个非常大的文件,它看起来不错。但是对于我的特定任务,我需要它同步读取行,即。无论如何,第 5 行不得在第 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}`);
});
如果没有,我应该use/do做什么?目前它对我有用,但我不知道它是否适用于大行,下一行的解析速度比上一行等快。
我非常怀疑稍后触发的回调是否可以比另一个回调更早执行。
基本上就是指进程的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}`)
})
并确保您的队列实施应在有任何任务要执行时启动。这样回调的顺序就会得到保证。但对我来说,它看起来有点开销。
我正在查看 nodejs readline 模块文档的任务,我必须逐行读取一个非常大的文件,它看起来不错。但是对于我的特定任务,我需要它同步读取行,即。无论如何,第 5 行不得在第 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}`);
});
如果没有,我应该use/do做什么?目前它对我有用,但我不知道它是否适用于大行,下一行的解析速度比上一行等快。
我非常怀疑稍后触发的回调是否可以比另一个回调更早执行。 基本上就是指进程的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}`)
})
并确保您的队列实施应在有任何任务要执行时启动。这样回调的顺序就会得到保证。但对我来说,它看起来有点开销。