从fast-csv获取结果对象

假设我已经命名了orders.js ,像这样:

 exports.getOrders = function() { return {'a': 'b'}; } 

和另一个名为report.js文件是这样的:

 var Order = require('./src/orders'); console.log(Order.getOrders()); 

这将打印{'a' : 'b'} ,我很高兴。 现在我想让事情更加复杂,因为我需要从CSV(使用fast-csv节点包)读取数据,所以我修改了orders.js

 var csv = require('fast-csv'); exports.getOrders = function(clientId) { var orders = []; csv .fromPath("./data/orders.csv", {headers: true, delimiter:';'}) .on("data", function(data) { orders.push({'price' : data.price}); } }) .on("end", function(){ console.log(orders) // THIS WILL PRINT THE CORRECT ARRAY return orders; }); console.log(orders); // THIS WILL PRINT AN EMPTY ARRAY return orders; } 

如何在report.js调用Order.getOrders()时如何返回正确的数组?

有许多asynchronous函数,你可以使用,但为此,我用瀑布法

你可以这样做

1.report.js

 var Order = require('./src/orders'); var c = 0; Order.getOrders(c, function(err, d ) { console.log('err', err, 'd', d); // do what you want to do with response 'd' // this will print an array of results // argument c is value for clientId parameter, use your // value or data }); 

2. order.js

 var csv = require('fast-csv'); var async = require('async') exports.getOrders = function (clientId, cb) { async.waterfall([ function (callback) { var orders = []; csv.fromPath("./data/orders.csv", { headers: true, delimiter: ';' }) .on("data", function (data) { orders.push({ 'price': data.price }); }) .on("end", function () { return callback(null, orders) }); } ], function(err, d) { if(err) return cb(err); cb(null, d) }) }