我正在嘗試從 csv 檔案中獲取資料,但我正在獲取 fs.readStream 物件
const fs = require("fs");
const csv = require("csv-parser");
const path = require("path");
const file = path.resolve(__dirname, "./file");
export const parseCsv = async () => {
const result = [];
return await fs
.createReadStream(file)
.pipe(csv())
.on("data", (data) => {
result.push(data);
})
.on("end", () => {
const obj = {};
result.forEach((service) => {
if (!obj[service.code]) {
obj[service.code] = service.rate;
}
});
console.log(obj);
return obj; // looking to get this
});
};
我正在創建 csv 檔案的物件映射并希望獲取該資料,但我一直在獲取該資料。
CsvParser {
_readableState: ReadableState {
objectMode: true,
highWaterMark: 16,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: [],
flowing: true,
ended: false,
endEmitted: false,
reading: false,
constructed: true,
sync: false,
needReadable: false,
emittedReadable: false,
readableListening: false,
resumeScheduled: true,
etc...
uj5u.com熱心網友回復:
awaitawait僅當您做出承諾并fs.createReadStream().pipe().on()回傳流而不是承諾時才會做一些有用的事情。我建議您將此流代碼包裝在一個承諾中,然后您可以resolve()適當reject()地使用該承諾。
然后,呼叫者將在回傳的 Promise 上使用awaitor.then()來訪問最終結果。
const fs = require("fs");
const csv = require("csv-parser");
const path = require("path");
const file = path.resolve(__dirname, "./file");
export const parseCsv = () => {
const result = [];
return new Promise((resolve, reject) => {
fs.createReadStream(file)
.pipe(csv())
.on("data", (data) => {
result.push(data);
}).on("end", () => {
const obj = {};
result.forEach((service) => {
if (!obj[service.code]) {
obj[service.code] = service.rate;
}
});
console.log(obj);
resolve(obj);
}).on(error, reject);
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/523580.html
上一篇:如何在打字稿中執行另一個函式之前正確等待異步函式完成?
下一篇:如何修復這樣的異步錯誤?
