如何将Meteor.wrapAsync与EventEmitter一起使用?

时间:2014-10-20 06:31:38

标签: meteor

我如何使用Meteor.wrapAsync来包装以下代码。

 var csv = require("fast-csv");
 csv
 .fromPath("my.csv")
 .on("data", function(data){
     console.log(data);
 })
 .on("end", function(){
     console.log("done");
 });

由于

1 个答案:

答案 0 :(得分:4)

假设CSV数据足够小以适合内存:

var parseCsvFromFile = Meteor.wrapAsync(function (filename, callback) {
  var result = [];
  csv.fromPath(filename)
     .on("data", function (row) { result.push(row); })
     .on("end", function () { callback(null, result); });
});

// usage:
var csvData = parseCsvFromFile(/* ... */);

Meteor.wrapAsync接受一个接受节点样式(err, results)回调的函数,并返回一个同步函数。因此,有必要编写一个消耗fast-csv事件发射器的函数,并为(err, results)转换提供wrapAsync回调接口。

完整的解决方案还可以处理来自fast-csv的错误。