[英]can't resolve a promise of a readstream ('csv-parser')
我正在嘗試從 .csv 文件中解析數據,並將其保存到一個數組中供以后使用。 我理解承諾的概念,但我不知道我的代碼中缺少什么,我無法解析 Promise 並獲取值(.csv 文件中的字符串)。 雖然我可以從調試模式查看 promise (.on('data')) 中的所有數據,但我無法保存它以便稍后在我的“try&catch”中使用它。
const fs = require("fs");
const csv = require("csv-parser");
const { resolve } = require("path");
async function readCSV(filepath) {
return new Promise(async (resolve, reject) => {
await fs
.createReadStream(filepath)
.pipe(csv())
.on("data", (data) => {
results.push(data);
})
.on("error", (error) => reject(results))
.on("end", () => {
resolve(results);
});
});
}
const results = [];
const csvFilePath =
"/languages.csv";
try {
const languages = readCSV(csvFilePath).then((res) => {
return res;
});
console.log(languages);
} catch (e) {
console.log(e);
}
控制台上的 output 是:
>Promise {<pending>}
No debugger available, can not send 'variables'
** 這是我在 promise 中暫停時的調試模式:
如果async
function 中沒有await
關鍵字,則無法try catch
返回的 promise。
如果要返回 promise,則需要在 promise 上使用.catch
方法。
此外,當您記錄languages
時,您會在 promise 解析之前這樣做,因為您沒有使用await
關鍵字。
我確定 promise 解決了。 相反,在.then
方法中記錄res
。
const fs = require("fs");
const csv = require("csv-parser");
const results = [];
function readCSV(filepath) {
return new Promise((resolve, reject) => {
fs
.createReadStream(filepath)
.pipe(csv())
.on("data", (data) => {
results.push(data);
})
.on("error", (error) => reject(results))
.on("end", () => {
resolve(results);
});
});
}
const csvFilePath = "./languages.csv";
(async () => {
const output = await readCSV(csvFilePath);
console.log(output)
})();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.