簡體   English   中英

無法訪問從 node.js ReadStream 存儲的數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM