我有以下情况,其中我有 data.txt
,包含数千行。
我的目标是读取这些文件的每一行并获取一些数据并将其存储在数组中。我使用 readline
和 fs.createReadStream
。
这是我做的:
const readingText = async () => {
const fileStream = fs.createReadStream(
"./data.txt"
);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
let dd = [];
rl.on("line", line => {
dd.push(line.split(":")[1]);
});
rl.on("close", async line => {
console.log(dd);
return dd;
});
};
const someFunc = async () => {
try {
const ff = await readingText();
console.log(ff);
} catch (err) {
console.log(err);
return false;
}
};
someFunc();
问题是 console.log(ff)
将始终返回 undefined
而 console.log(dd)
正确返回所需的 dd
数组,这是为什么呢?以及如何让 console.log(ff)
等到 ff
变量被分配给 dd
数组的值?
谢谢
最佳答案
基于事件的执行不等待父异步函数。
试试这个:
const readingText = async () => {
return new Promise((resolve, reject) => {
const fileStream = fs.createReadStream(
"./data.txt"
);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
let dd = [];
rl.on("line", line => {
dd.push(line.split(":")[1]);
});
rl.on("close", line => {
console.log(dd);
return resolve(dd);
});
});
};
const someFunc = async () => {
try {
const ff = await readingText();
console.log(ff);
} catch (err) {
console.log(err);
return false;
}
};
someFunc();
关于javascript - Node JS 同步读取一行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54995110/