从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) }) }