逐行解决逐行读取文件的问题,如下所述:https://stackoverflow.com/a/16013228/570796
var fs = require('fs'),
readline = require('readline'),
instream = fs.createReadStream('/path/to/file');
var rl = readline.createInterface(
{
input: instream,
terminal: false
});
rl.on('line', function(line)
{
console.log(line);
// if(instream.isEnd()) ...
});
如何检测我是否到达文件末尾?
我知道ReadStream
on('end', () => {/*...*/})
上有一个事件但是我需要一个解决方案,我可以通过if语句检查它。
答案 0 :(得分:4)
这是一个解决方案:
let ended = false;
instream.on('end', () => { ended = true });
rl.on('line', function(line) {
if (ended) {
//...
但是,您实际上并不需要这样做,并且您的应用程序结构可能不同。
我不确定line
事件是否会在end
事件发生后发生。
结果证明我的怀疑是真的,所以你需要这样做。
let lastLine;
rl.on('line', line => { lastLine = line })
instream.on('end', () => {
assert.notStrictEqual(lastLine, undefined, 'There were no lines!');
// ...
});
答案 1 :(得分:0)
另一种(优雅的)方法可能是实施承诺。
您还可以添加拒绝("在阅读文件&#34时出错; ,链接到 input.on('错误')在阅读时但是问题不是100%所必需的。
var fs = require('fs');
var input = require('fs').createReadStream('./inputFile.txt')
var promise = new Promise(function(resolve, reject) {
var lineReader = require('readline').createInterface({
input: input
});
input.on('end', () => {
resolve("I reached the end!");
});
lineReader.on('line', (line) => {
// DO STH. WITH EACH LINE (IF DESIRED)
});
});
promise.then((resolveResult) => {
// DO WHATEVER YOU WANT TO DO AFTER
}
有关承诺的更多信息,请查看以下介绍: