我试图读取多个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根本就不是为此构建的。
所以如果有人能帮我理解如何修复这个异步,我会很高兴。然而,这是我第一次遇到这样的问题。一个小时前我还不知道概念异步代码。
答案 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。