将csvtojson转换器的值传递给其范围之外的变量

时间:2016-09-09 14:47:33

标签: javascript node.js

我目前正在摆弄Node.js,我坚持这个问题。

我正在使用csvtojson转换器(https://github.com/Keyang/node-csvtojson)作为一个单独的模块,我可以在我的其他JS文件中多次调用它。

这是我的tools.js:

module.exports = {
	csvToJson: function (csvPath) {
		var Converter = require('csvtojson').Converter;
		var converter = new Converter({});
		var transfer = "DEFAULT";
		converter.fromFile(csvPath, function(err, result){
			if (err) {
				return console.log(err);
			}
			else {
				transfer = result;
			}
		});
		return transfer;
	}
};

以下是我的称呼方式:

var countriesCsvFile = path.join(__dirname, '..', 'testDataFiles', 'countries.csv');

//GRAB TOOLS
var tools = require('../app/tools');
console.log(tools.csvToJson(countriesCsvFile));

结果始终是“DEFAULT”值,表示转换器未触及它。

我想将它作为函数的返回值传递,以进一步能够动态处理数据,而无需创建文件,并读取它。 这肯定是一些范围问题,但是在我的头皮刮了几个小时后,浏览问题我找不到任何有用的东西。

另外,另一个注意事项:如果我调用console.log(结果)而不是transfer = result,它会显示我宝贵的数据。

1 个答案:

答案 0 :(得分:1)

你必须传入一个回调函数,因为csvToJson函数在为其赋值之前返回'transfer'。像Sirko说的那样,它是异步的。您也可以使用promises而不是回调,但这本身就是另一个主题。

module.exports = {
  csvToJson: function (csvPath, callback) {
    var Converter = require('csvtojson').Converter;
    var converter = new Converter({});
    converter.fromFile(csvPath, function(err, result){
      if (err) {
        callback(err);
      }
      else {
        callback(null, result);
      }
    });
  }
};