У меня есть следующий код:
const fs = require("fs");
const {createInterface} = require("readline");
const {join} = require("path");
const {once} = require("events");
async function readMeta (path) {
const meta = {};
const rs = fs.createReadStream(path);
const lineReader = createInterface({input: rs});
let linesRead = 0;
lineReader.on("line", line => {
switch (linesRead) {
case 0:
meta.name = line;
break;
case 1:
meta.tags = line.split(" ");
break;
case 2:
meta.type = line;
break;
case 3:
meta.id = +line;
}
if (++linesRead === 4) {
lineReader.close();
}
});
await once(lineReader, "close");
rs.close();
return meta;
}
Кажется, он работает, но регистрация строк, когда срабатывает событие line
, показывает обратное. Событие по-прежнему вызывается после вызова lineReader.close()
, в результате чего читается весь файл. Я понятия не имею, что вызывает это. Я нашел несколько модулей, которые, по-видимому, справляются с этой задачей, но я хочу сохранить зависимости, если возможно.