我如何使用Meteor.wrapAsync来包装以下代码。
var csv = require("fast-csv");
csv
.fromPath("my.csv")
.on("data", function(data){
console.log(data);
})
.on("end", function(){
console.log("done");
});
由于
答案 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
的错误。