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

时间:2017-07-13 13:25:54

标签: javascript node.js

我编写了具有函数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);

2 个答案:

答案 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 功能。