使用 parseCSV 理解承诺 async/await,我错过了什么?

Understanding promises async/await using parseCSV, what am I missing?

我觉得我在这里缺少一些基本的东西。我只是想确保“数据”在我继续 clean/edit 之前保存来自 parseCSV 的已解析数据。

我错过了什么?我从根本上理解 async / await,但我想在回调和 async / await 方面我有些不明白。

const csv = require("csv");
const fs = require("fs");

(async function start() {
  const file = importCSV("src/tg.csv");
  const data = await parseCSV(file);
  console.log(await parseCSV(file)); // why does this print a parser and not the parsed data?
})();

function importCSV(path) {
  return fs.readFileSync(path, "utf8");
}

async function parseCSV(file) {
  return await csv.parse(file, { columns: true }, async (err, data) => {
    if (err) return err;
    //console.log(data);
    return data;
  });
}

因为您没有返回 datacsv.parse 不是一个承诺,所以基本上 data 被返回给匿名回调函数的父函数。 试想一个使用回调的函数的实现,你是如何实现的?

const a = (cb) => {
    const data = getdatafromsomewhere();
    cb(data);
}

因此,如果您的函数没有专门返回父函数,则不会从任何地方引用返回的数据。

所以最简单的方法是承诺 csv.parse

const util = require('util');
const promiseParse = util. promisify(csv.parse);

function parseCSV(file) {
  return promiseParse(file, { columns: true })
}