我在下面有一個函式,目的是決議多個本地 csv 檔案。對于每個決議的 csv 檔案,然后我抓取 1-5 個隨機元素。由于 CSV 決議器以嵌套陣列結構 ( [['a'], ['b'], ['c']]) 輸出資料,因此我進一步處理資料并提取單個陣列元素以推送到final陣列中。
我的最終目標是types通過為每個鍵傳遞相應的陣列來更新映射中的值
let health = createHealthData();
console.log(health, 'final output')
function createHealthData() {
let types = new Map();
types.set('allergies', '');
types.set('medications', '')
let start = 1;
let limit = 5;
for (let key of types.keys()) {
let randNum = Math.floor(Math.random() * (limit - start 1) start); // Generates random numbers between start and limit
let file = fs.createReadStream(path.resolve(__dirname, `${key}.csv`))
Papa.parse(file, {
header: false,
complete: (results) => {
let first = []
let data = results.data;
let final = [];
for (let i = 1; i <= randNum; i ) {
first.push(data[Math.floor(Math.random() * data.length)])
}
first.forEach((x) => {
x.forEach((y) => {
final.push(y)
})
})
types.set(key, final);
console.log(types);
}
})
}
return types;
}
types我的函式可以很好地決議和處理 csv 檔案,但是一旦我回傳地圖,它就會拒絕更新地圖中的現有鍵
例如,我的輸出console.log(types)給了我:
Map(2) {
allergies => ['Banana Allergy'],
medications => ['Opana ER', 'Atrovent HFA']
}
這就是我打算從函式中傳遞出來的。
health但是,在函式完成執行后查看變數時,輸出為:
Map(2) {'allergies' => '', 'medications' => ''} final output
好像該行types.set(key,final)從未在函式末尾執行。我正在努力尋找這個錯誤的來源,并且根據types函式中變數的范圍,我沒有看到它可能被覆寫的位置。
uj5u.com熱心網友回復:
據我了解,函式回傳無需等待 Papa.parse 回呼,因此請嘗試如何將 Promises 與 PapaParse 一起使用中的解決方案?等待完整的回呼完成然后回傳型別
uj5u.com熱心網友回復:
看起來 Papa.parse 是異步的: https ://www.papaparse.com/docs
“不回傳任何東西。結果以異步方式提供給回呼函式。”
由于您return types在最后,由于執行的異步性質(即回傳型別首先發生,然后是決議完成回呼),您將無法獲得正確的值。
有一個類似的問題描述了處理 Papa.parse 的不同方式:How to use Promises with PapaParse?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473186.html
標籤:javascript CSV 字典 解析 帕帕帕斯
上一篇:從一個鍵和元組串列創建字典
