传递给readFileSync的匿名函数不返回任何数据

我已经写了简单的JS对象,它有函数csvFileToArray 。 函数应该返回parsing的CSV数组。

问题是我没有从传递给readFileSync匿名函数的输出。

test1被locking正确的控制台,但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); 

您正在使用readFileSyncfunction,它正在工作同步。 所以你不能在它里面使用callback。 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); 

如果你想使用它asynchronous你可以使用readFile函数。

你在混合fs.readFileSync(path [,options])和fs.readFile(path [,options],callback) File System | Node.js v8.1.4文档 ?

您正在使用的方法不接受callback参数。