簡體   English   中英

無法解析讀取流的 promise ('csv-parser')

[英]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 中暫停時的調試模式:

https://i.stack.imgur.com/H9nHi.png

如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM