0

我正在尝试使用“csvtojson”从多个 CSV 文件中获取数据。

  1. 获取目录中的文件名数组。
  2. Ran forEach 以 JSON 格式从不同的 CSV 文件中获取数据并推送到单个数组中。

问题是我无法向客户端发送数据,因为 promises 需要更长的时间来获取数据并且我无法找到方法

这是我的代码:

router.get("/covidData/", (req, res) => {
const jsonData = [];
const files = fs.readdirSync(__dirname.replace("routes", "public/covidData"));


const fetchData = () => {
  files.forEach(async (file) => {
    let response = await csvtojson({
      includeColumns: /Date Announced|Detected State|Current Status/,
    }).fromFile(__dirname.replace("routes", "public/covidData/" + file));

    jsonData.push(...response);
  });
};
fetchData();
res.send(jsonData);
});
4

1 回答 1

0

您的问题是,在尝试将数据发送回客户端之前,您需要await 所有的承诺。你可以通过映射你的承诺然后在调用await Promise.all 之前res.send使用来做到这一点。以下内容应该可以让您大部分时间到达那里。

router.get("/covidData/", async (req, res) => {
  const files = fs.readdirSync(__dirname.replace("routes", "public/covidData"));

  const data = files.map((file) => {
    return csvtojson({
      includeColumns: /Date Announced|Detected State|Current Status/,
    }).fromFile(__dirname.replace("routes", "public/covidData/" + file));
  });

  const finalData = await Promise.all(data);
  res.send(finalData.flat());
});
于 2021-05-02T01:30:35.870 回答