我试图读取多个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