我是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")
部分,即使我将columns
传入其中也没有任何区别。
这件事是异步的吗?我怎样才能让它返回我的对象?谢谢!
答案 0 :(得分:2)
节点JS是异步的,这意味着你必须等到文件读取操作完成然后使用columns
变量,这样你就不能在行执行后立即返回列,甚至在.on("close")
中也不能将callback
函数作为参数传递给您的函数,并在callback
准备就绪时运行columns
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)
})