You need to enable JavaScript to run this app. Node.js读取CSV时文件流未完成就返回空数组,如何等待执行结束?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 12:48:04