传递给readFileSync的匿名函数不返回任何数据 [英] Anonymous function passed to readFileSync is not returning any data

查看:106
本文介绍了传递给readFileSync的匿名函数不返回任何数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一个简单的JS对象,它有函数 csvFileToArray 。函数应返回已解析的CSV数组。

I have writen simple JS object which has function csvFileToArray. Function should return parsed CSV array.

问题是我没有传递给 readFileSync

The problem is that I don't have output from anonymous function which is passed to readFileSync.

test1 被正确安装到控制台但是 test2 是不是。

test1 is loged to console correctly but test2 is not.

这是我第一次使用node.js我做错了什么?

It's my first time with node.js What am I doing wrong?

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

You are using readFileSync function and it's working sync. So you can not use callback inside it. DOC

所以你可以像以下一样使用它:

So you can use it like:

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

If you want to use it async you can use readFile function.

这篇关于传递给readFileSync的匿名函数不返回任何数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆