gpt4 book ai didi

javascript - 在node.js(readline)中逐行读取数据,但完成后对象始终为空

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:48 25 4
gpt4 key购买 nike

我对 Node.js 完全是菜鸟(但我已经成为一名开发人员 21 年了,fwiw)。我正在尝试编写一个小应用程序,它将读取 csv 文件并将其解析为对象。代码如下:

var getFile = (filename) => {

var columns = [],
x = 0,
linereader = readline.createInterface({
input: fs.createReadStream('./import/' + filename)
});

linereader.on('line', function (line) {
columns[x] = {};
columns[x].data = line.split("|");
x++;
}).on('close', () => {
return columns;
});

};

它工作正常,直到返回对象columns,该对象通过调试器完美创建。但是,一旦超出 linereader 部分,它就是空的。

几分钟前我尝试添加 .on("close") 部分,即使我将传递到其中,也没有什么区别。

这东西是异步的吗?我怎样才能让它返回我的对象​​?谢谢!

最佳答案

Node JS 是异步的,这意味着您必须等到文件读取操作完成,然后使用 columns 变量,因此您无法在行执行后立即返回列,甚至无法在 .on("close") 中返回列,而是将 callback 函数作为参数传递给函数,并在 columns 准备就绪时运行 callback

var getFile = (filename, callback) => {
var columns = [],
x = 0,
linereader = readline.createInterface({
input: fs.createReadStream('./import/' + filename)
});

linereader.on('line', function (line) {
columns[x] = {};
columns[x].data = line.split("|");
x++;
}).on('close', () => {
callback(columns);
});
};

// usage
getFile("path/to/file", (columns) => {
console.log(columns.length)
})

关于javascript - 在node.js(readline)中逐行读取数据,但完成后对象始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48269031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com