我想比較兩個檔案的資料,為此,我正在使用 fs 模塊讀取該檔案,但由于我想比較這些值,所以我想將值存盤在一個外部變數中,但是當我執行 console.log( budget_details)我在控制臺中什么也沒有。請有人幫忙。請指出我的方法是否錯誤,如果我們不需要在 nodejs 中這樣做。我是nodejs的新手。
import csv from 'csv-parser'
import fs from 'fs';
let budget_details
const budgetProcessing = (budget_file_path) => {
try{
fs.createReadStream(budget_file_path)
.pipe(csv())
.on('data', (row) => {
budget_details = row
})
.on('end', () => {
console.log('CSV file successfully processed');
});
}
catch(error){
console.log(error)
}
}
budgetProcessing('budget.csv')
console.log(budget_details)
uj5u.com熱心網友回復:
讓我們首先解釋為什么你沒有得到預期的結果,它實際上與范圍無關:
import csv from 'csv-parser'
import fs from 'fs';
let budget_details
const budgetProcessing = (budget_file_path) => {
try{
fs.createReadStream(budget_file_path)
.pipe(csv())
.on('data', (row) => {
budget_details = row
})
.on('end', () => {
console.log('CSV file successfully processed');
});
}
catch(error){
console.log(error)
}
}
budgetProcessing('budget.csv')
console.log(budget_details)
fs.createReadStream它本身并不是完全異步的,但是我們通過管道將回傳的流進行csv-parser基于事件的決議,因此即使您console.log(budget_details)在流讀取很可能尚未運行并且budget_details仍然未定義之前呼叫budgetProcessing。
要解決此問題,您可以將console.log(budget_details)其移動到設定的位置,如下所示:
let budget_details
const budgetProcessing = (budget_file_path) => {
try{
fs.createReadStream(budget_file_path)
.pipe(csv())
.on('data', (row) => {
budget_details = row
console.log(budget_details)
})
.on('end', () => {
console.log('CSV file successfully processed');
});
}
catch(error){
console.log(error)
}
}
budgetProcessing('budget.csv')
但是變數本身不會有任何實際用途,因此您可以這樣做:
const budgetProcessing = (budget_file_path, callback) => {
try{
fs.createReadStream(budget_file_path)
.pipe(csv())
.on('data', (row) => {
callback(row)
})
.on('end', () => {
console.log('CSV file successfully processed');
});
}
catch(error){
console.log(error)
}
}
budgetProcessing('budget.csv', (budget_details) => {
console.log(budget_details) // or anything with budget_details
})
最后,我想明確表示,將為csv-parser的檔案中指定的 csv 的每一行呼叫回呼
uj5u.com熱心網友回復:
您的代碼不是異步的。任何帶有“on”的東西,它帶有一個函式,表明它是事件驅動的。你需要類似的東西:
import csv from 'csv-parser'
import fs from 'fs';
let budget_details
const budgetProcessing = (budget_file_path) => new Promise((resolve, reject) => {
try {
fs.createReadStream(budget_file_path)
.pipe(csv())
.on('data', (row) => {
budget_details = row
})
.on('end', () => {
console.log('CSV file successfully processed');
resolve()
});
} catch (error) {
console.log(error)
reject(error)
}
})
budgetProcessing('budget.csv')
.then(() => console.log(budget_details))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436471.html
