我有这个node.js文件,它通过这样的数据流读取.csv:
shldata = []
fs.createReadStream('./spreadsheets/shl.csv')
.pipe(csv({separator:';'}))
.on('data', (row) => {
shldata.push(row);
})
.on('end',() => {
console.log('CSV file successfully processed');
});
console.log(shldata);
顺便说一句,如果不通过读取流,我找不到另一种方法来做到这一点。
如果我console.log在“ .on('end')”承诺中的数据,它将为我提供数据。如果之后再执行此操作,则它为空。
[我感觉到流被排队,并且仅在记录数据变量后才读取。
我已经尝试在诺言中添加“ return shldata”,但无济于事。
[此外,我正在尝试删除不需要的CSV列中的某些列。我尝试在Promise中添加此for循环:
for (i=0; i < shldata.length; i++){
delete shldata[i]['key1'];
delete shldata[i]['key2'];
(...)
}
它有效,但前提是我为每个列标题重复该行。如果我尝试使用类似这样的键数组,它将无法正常工作:
for (i=0; i < shldata.length; i++){
delete shldata[i][keystoRemove];
}
在流之前设置数组“ keystoRemove”的位置。我觉得我需要以某种方式将这个数组输入到这个承诺中,否则它将无法阅读。
这一切都感觉很复杂。我只是想编写一个脚本来读取一些文件,稍微更改它们的数据,然后将HTTP帖子提交给API。
对菜鸟有帮助吗?
您可以整体访问shldata
inside'end'事件处理程序。
.on('end',() => {
console.log('CSV file successfully processed');
// at this point you have all the data.
}
您当前的代码正在尝试访问所有数据并触发所有事件之前的代码。如果这是一个专用函数,则可以在此事件处理程序内使用return shldata;
。