Node.js读取CSV时文件流未完成就返回空数组,如何等待执行结束?
解决方案
你的问题根源是文件流读取解析是异步操作,同步返回数组时,流还没完成数据读取,所以拿到的是空数组。可以通过Promise封装异步流程,配合async/await实现结果返回,修改后的代码如下:
const parser = require("csv-parser"); const fs = require("fs"); class CsvConverter { constructor() {} // 给convert方法添加async修饰 async convert(filePath) { try { const csvResult = await this.getRawCsv(filePath); console.log(csvResult); // 后续业务逻辑可在此处编写 } catch (err) { console.error('CSV文件解析失败:', err); } } getRawCsv(filePath) { // 返回Promise封装异步流操作 return new Promise((resolve, reject) => { const results = []; fs.createReadStream(filePath) .pipe(parser()) .on("data", (data) => results.push(data)) .on("end", () => resolve(results)) // 读取完成返回结果数组 .on("error", (err) => reject(err)); // 读取出错抛出错误 }); } } module.exports = CsvConverter;
调用示例
const CsvConverter = require('./CsvConverter'); const converter = new CsvConverter(); // 传入你的csv文件路径即可 converter.convert('./example.csv');
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

