You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中如何从路径数组生成Promise数组以批量异步处理CSV文件

实现方案

完整可运行代码

const fsPromises = require('fs').promises
const parse = require('csv-parse/lib/sync')
const fs = require('fs')

// 读取目录下所有文件名,过滤仅保留.csv文件,拼接为完整路径
const csvFilePaths = fs.readdirSync(__dirname + '/testdata')
  .filter(fileName => fileName.endsWith('.csv'))
  .map(fileName => `${__dirname}/testdata/${fileName}`)

// 生成读取+解析的Promise数组
const fileProcessPromises = csvFilePaths.map(filePath => {
  return fsPromises.readFile(filePath)
    .then(file => parse(file, {
      columns: ['Date', 'Name', 'Value'],
      relax_column_count: true,
      fromLine: 2,
    }))
})

async function readDirectory() {
  try {
    const fileData = await Promise.all(fileProcessPromises)
    const fileDataFlattened = fileData.flat()
    console.log(fileDataFlattened)
    // 后续业务逻辑可在此处补充
  } catch (err) {
    console.log('文件读取解析出错:', err)
  }
}
    
readDirectory()

关键逻辑说明

  • 先对readdirSync返回的文件名做过滤,只保留后缀为.csv的文件,避免目录下其他类型文件导致解析报错
  • 通过Array.map遍历每个符合要求的文件路径,每个路径都返回一个「读取文件+解析内容」的Promise实例,直接就能得到可传入Promise.all的批量任务数组
  • 后续的结果扁平化、业务处理逻辑和你之前硬编码版本完全一致

可选优化(全异步实现)

如果不想用同步的readdirSync阻塞主线程,可以改成全异步逻辑:

const fsPromises = require('fs').promises
const parse = require('csv-parse/lib/sync')

async function readDirectory() {
  try {
    // 异步读取目录
    const fileNames = await fsPromises.readdir(__dirname + '/testdata')
    const csvFilePaths = fileNames
      .filter(fileName => fileName.endsWith('.csv'))
      .map(fileName => `${__dirname}/testdata/${fileName}`)
    // 生成Promise数组并批量执行
    const fileProcessPromises = csvFilePaths.map(filePath => 
      fsPromises.readFile(filePath).then(file => parse(file, {
        columns: ['Date', 'Name', 'Value'],
        relax_column_count: true,
        fromLine: 2,
      }))
    )
    const fileData = await Promise.all(fileProcessPromises)
    const fileDataFlattened = fileData.flat()
    console.log(fileDataFlattened)
  } catch (err) {
    console.log('出错:', err)
  }
}

readDirectory()

内容的提问来源于stack exchange,提问作者Eric

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:18:02