javascript - 如何在node.js中读取多个csv文件

标签 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 根本不是为此构建的。

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

最佳答案

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 .

关于javascript - 如何在node.js中读取多个csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30718142/

相关文章:

javascript - Javascript 中 ASP.NET View 状态的大小

javascript - .delay() 不能与 SlideUp() 一起使用

node.js - 为什么这个 if/else 在 ejs 中不起作用?

node.js - NestJS 条件模块导入

mysql - nodejs mysql bulk INSERT on DUPLICATE KEY UPDATE

c - 从字符串中删除尾部空格 (char*)

javascript - 如何仅将 UserControl 中的 javascript 文件添加到 ASP.NET 页面一次?

javascript - Excel 文件通过 POST 下载 C#(避免 404.15 查询字符串错误)

file - 卸载后如何使WiX离开文件?

java - 从命令行获取文件名并查看它们是否存在于 Java 中