2014-10-20 60 views
1

我將如何使用Meteor.wrapAsync來包裝下面的代碼。如何使用Meteor.wrapAsync和EventEmitter?

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

由於

回答

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的事件發射器,並提供一個用於wrapAsync轉換的(err, results)回調接口。

完整的解決方案還將處理來自fast-csv的錯誤。

+0

非常感謝您的幫助。你的代碼完美地工作 – Taimoor 2014-10-20 17:40:09