我编写了具有函数csvFileToArray
的简单JS对象。函数应返回已解析的CSV数组。
问题是我没有传递给readFileSync
的匿名函数的输出。
test1
可以正确控制,但test2
不是。
这是我第一次使用node.js我做错了什么?
var passwdArray = [];
var csv = function () {
this.csvFileToArray = function (fileName, delimiter) {
console.log("test1");
var fs = require('fs');
fs.readFileSync(fileName, 'utf8', function(err, data) {
console.log("test2");
if (err) {
throw err;
} else {
var csvLineArray = data.split("\n");
var csvArray = [];
csvArray['header'] = csvLineArray[0].split(delimiter);
csvArray['data'] = [];
for(var i = 1; i < csvLineArray.length; i++) {
csvArray['data'].push(csvLineArray[i].split(delimiter));
}
return csvArray;
}
});
}
}
var csvHandler = new csv();
var test =csvHandler.csvFileToArray('test.csv', ',');
console.log(test);
答案 0 :(得分:2)
你混淆了fs.readFileSync(path [,options])和fs.readFile(path [,options],callback)File System | Node.js v8.1.4 Documentation?
您使用的方法不接受回调参数。
答案 1 :(得分:2)
您正在使用 readFileSync 功能并且正在进行同步。所以你不能在里面使用回调。 DOC
所以你可以像:
一样使用它var passwdArray = [];
var csv = function () {
this.csvFileToArray = function (fileName, delimiter) {
console.log("test1");
var fs = require('fs');
var data = fs.readFileSync(fileName, 'utf8');
var returnedData = doSomething(null,data);
console.log(returnedData);
}
};
function doSomething(err, data) {
console.log("test2");
if (err) {
throw err;
} else {
var csvLineArray = data.split("\n");
var csvArray = [];
csvArray['header'] = csvLineArray[0].split(delimiter);
csvArray['data'] = [];
for(var i = 1; i < csvLineArray.length; i++) {
csvArray['data'].push(csvLineArray[i].split(delimiter));
}
return csvArray;
}
};
var csvHandler = new csv();
var test =csvHandler.csvFileToArray('test.csv', ',');
console.log(test);
如果您想使用它同步,可以使用 readFile 功能。