如何读取node.js中的多个csv文件

时间:2015-06-08 20:07:43

标签: javascript node.js file csv asynchronous

我试图读取多个csv文件,然后将它们作为属性添加到对象中,但node.js的异步确实阻止我这样做。

这是我试过的代码。

var Converter=require("csvtojson").core.Converter; 
var fs = require('fs');
var csvConverter=new Converter();
var data = {};

for (var i = 0; i < 10; i++)
{   
    var csvFileName="./data/String(i)".csv";

    csvConverter.on("end_parsed",function(jsonObj){
    data['file'+String(i)] = json;


    //read from file
    fs.createReadStream(csvFileName).pipe(csvConverter);
});

}

这导致了一个可怕的混乱,因为for循环在任何事件被触发之前完成。我真的更喜欢同步解决方案,但我知道node.js根本就不是为此构建的。

所以如果有人能帮我理解如何修复这个异步,我会很高兴。然而,这是我第一次遇到这样的问题。一个小时前我还不知道概念异步代码。

1 个答案:

答案 0 :(得分:0)

i有问题,因为您无法预测end_parsed回调函数中的内容,请尝试:

var fileIndex = 0;
csvConverter.on('end_parsed', function (json) {
    data['file' + fileIndex] = json;
    if (fileIndex === 9) {
       // It is done, call the callback to finish processing
       callback(data);
    }
    fileIndex += 1;
});

var callback = function (data) {
    // Put callback code here
    console.log(data.file0);
};

解决此问题的最佳方法是使用Promises