我正在嘗試撰寫一個功能,我正在嘗試讀取一個 csv 檔案,在此之前我正在嘗試檢查該特定 csv 檔案的標題是否正確給出。下面是我的代碼
let validHeaders = false;
fs.createReadStream(path)
.pipe(csv.parse({headers : true , ignoreEmpty : true}))
.on('headers',async function(headers){
validHeaders = await CustomValidation.isValidRowsExists(headers);
console.log(validHeaders); // here i am getting true
.on('data',async function(req,res,data){
console.log(validHeaders); //here i am getting false
if(validHeaders){ //do something
這是我的 CustomValidation 類
class CustomValidation{
isValidRowsExists = async(csvRows) =>{
for(let i=0;i<csvRows.length;i ){
if(csvRows[0]==='Col1 && csvRows[1]==='Col2 ....){
return true;
}else{
return false;
}
}
}
}
module.exports = new CustomValidation;
我如何使用 validHeaders 值
uj5u.com熱心網友回復:
可能你需要這樣的東西:
const main = async () => {
const csvStream = fs
.createReadStream(path)
.pipe(csv.parse({ headers: true, ignoreEmpty: true }));
const validHeaders = await new Promise((resolve) =>
csvStream.on("headers", (headers) =>
resolve(CustomValidation.isValidRowsExists(headers))
)
);
csvStream.on("data", (data) => {
if (validHeaders) {
console.log(data);
}
});
};
main();
UPD:
帶有異步驗證的 Heiko 演示

uj5u.com熱心網友回復:
如果 CustomValidation.isValidRowsExists是異步的(但見下文):
moondef 的解決方案.on("data")僅在等待CustomValidation.isValidRowsExists. 但到那時,data事件可能已經發生了。
我建議同步附加處理程式,并在確定標頭有效性后使用承諾異步記錄資料。
var validHeaders;
csvStream.on("headers", function(headers) {
validHeaders = Promise.resolve(CustomValidation.isValidRowsExists(headers));
})
.on("data", function(data) {
validHeaders.then(function(valid) {
if (valid) console.log(data);
});
});
然而,CustomValidation.isValidRowsExists如圖所示實際上不是異步的,因為它包含 noawait并且不回傳一個 Promise。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/488490.html
標籤:javascript 节点.js 表示 CSV
