使用module.exports返回对象

米格尔

我正在使用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);

但是,不幸的是,投资组合对象是未定义的。

有任何想法吗?

谢谢

丹尼尔·利兹克(Daniel Lizik)

您导出的模块必须是一个将回调作为其参数的函数。导出的函数将为回调提供异步生成的数据。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章