我想一个接一个地读取添加到文件中的所有新行,就像它是一个数据流一样。到目前为止,我正在使用chokidar接收有关该文件的每次更新的通知,然后,我使用read-last-lines传递数字1
来指示我只想读取一行。
import fs from 'fs';
const readLastLines = require('read-last-lines');
import chokidar from 'chokidar';
const logFile = 'log.txt';
// first checks if its exist
if (fs.existsSync(logFile)) {
// then start watching on every update
chokidar.watch(logFile).on('change', (_event, _path) => {
// read each update
readLastLines.read(logFile, 1)
.then((line: string) => {
// do something with this received line.
// Can't receive two or three lines if sent instantaneously
doSomething(line);
}).catch((err :any) => {
console.log(err)
})
})
} else {
console.log('File Not Found')
}
我工作得很好,除非我立即对文件进行了两三个更新。在这种情况下,我只能获得此更新序列的最后一行。我认为chokidar
他的操作可能有延迟,或者我的操作系统不允许该节点程序同时读取另一个程序正在写入的文件。
关于如何解决这个问题的任何猜测?如果它是终端上的程序输出(stdout),我希望它完全运行。(实际上,我的 porpouse 是使用它从客户端记录在我的服务器上运行的程序)。