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

标签 javascript node.js

我写了一个简单的 JS 对象,它具有函数 csvFileToArray。函数应返回已解析的 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);

最佳答案

您正在使用 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 函数。

关于javascript - 传递给 readFileSync 的匿名函数不返回任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45082008/

相关文章:

node.js - amqplib - 尽管调用了channel.ack(msg),但消息仍未确认

javascript - 如何正确构建nodejs代码

javascript获取系统时区的时间戳而不是UTC

Javascript倒计时设置超时

javascript - Angular 资源 promise 捕获, Jasmine toThrow()

javascript - 无法在 Javascript 中更改 img 的 src(无法设置 null 的属性 'src')

javascript - 注入(inject)的 iframe 和其他网页(Google、Gmail、Pdf)之间的问题

javascript - Electron "require is not defined"

node.js - 在express中将 "hook"放入app.response函数的正确方法是什么?

node.js - 为每个公司管理员创建路由登录