我正在使用csvtojson解析一个csv文件,并想在NodeJS的另一个模块中使用它。可以肯定,这是我尝试学习NodeJS时遇到的一个菜鸟问题。
function loadPortfolio (portfolio) {
//Converter Class
var Converter = require("./node_modules/csvtojson").Converter;
var converter = new Converter({});
//end_parsed will be emitted once parsing finished
converter.on("end_parsed", function (jsonArray) {
var jsonText = JSON.stringify(jsonArray);
var portfolioObj = JSON.parse(jsonText);
module.exports = loadPortfolio;
});
//read from file
require("fs").createReadStream("./charlesriverexport.csv").pipe(converter);
};
然后在我的app.js文件中:
var loadPortfolio = require('./loadPortfolio');
console.log("Portfolio: ", portfolio);
但是,不幸的是,投资组合对象是未定义的。
有任何想法吗?
谢谢
您导出的模块必须是一个将回调作为其参数的函数。导出的函数将为回调提供异步生成的数据。
var fs = require('fs');
var Converter = require('./node_modules/csvtojson').Converter;
module.exports = function loadPortfolio (callback) {
var converter = new Converter({});
fs.createReadStream('./charlesriverexport.csv').pipe(converter);
converter.on('end_parsed', function (jsonArray) {
var jsonText = JSON.stringify(jsonArray);
var portfolioObj = JSON.parse(jsonText);
callback(portfolioObj);
});
};
在使用此模块的文件中:
var loadPortfolio = require('./loadPortfolio');
loadPortfolio(function(portfolioObj) {
console.log(typeof portfolioObj); // => 'object'
});
编辑:如果要portfolioObj
在回调上下文之外使用异步获取,则loadPortfolio
必须设置一个未定义的变量,然后在回调中分配它。
//set undefined variable
var portfolio;
//import your function
require('./loadPortfolio')(function(portfolioObj) {
//assign the global variable a value
portfolio = portfolioObj;
//when doSomething runs portfolio is guaranteed to be defined
doSomething();
});
//see the problem with calling doSomething outside the callback?
doSomething(); // => 'undefined'
function doSomething() {
console.log(typeof portfolio); // => 'object'
}
但是,一种更整洁的方式是兑现承诺。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句