无法访问从node.js ReadStream中存储的数据吗?

问题描述 投票:0回答:1

我有这个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。

对菜鸟有帮助吗?

javascript node.js json stream
1个回答
0
投票

您可以整体访问shldata inside'end'事件处理程序。

.on('end',() => {
    console.log('CSV file successfully processed');
    // at this point you have all the data.
}

您当前的代码正在尝试访问所有数据并触发所有事件之前的代码。如果这是一个专用函数,则可以在此事件处理程序内使用return shldata;

© www.soinside.com 2019 - 2024. All rights reserved.