[英]Can't access data stored from a node.js ReadStream?
我有這個 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);
順便說一句,如果不是通過讀取流,我找不到另一種方法來做到這一點。
如果我在“.on('end')”promise 中控制台.log 數據,它會給我數據。 如果我之后再做,它會給我空值。
我有一種感覺,流被排隊,只有在記錄數據變量后才讀取。
我試過在承諾中添加“返回 shldata”,但無濟於事。
另外,我正在嘗試刪除一些我不需要的 CSV 列。 我嘗試在承諾中添加這個 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”。 我有一種感覺,我需要以某種方式將這個數組輸入到這個 promise 中,否則它不會讀取它。
這一切都感覺不必要地復雜。 我只是想編寫一個腳本來讀取幾個文件,稍微更改它們的數據並向 API 提交 HTTP 帖子。
您可以訪問shldata
在整體上“結束”事件處理中。
.on('end',() => {
console.log('CSV file successfully processed');
// at this point you have all the data.
}
您當前的代碼正在嘗試在處理所有數據和觸發所有事件之前訪問它。 如果這是一個專用函數,您可以return shldata;
在此事件處理程序中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.