我正在尝试读取多个 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/