Node.js中不依赖第三方库用Promise并行读取两个CSV文件
原生Promise并行读取多个CSV文件方案
没问题!原生ES6 Promise自带的Promise.all()方法就是干这个的,完全不需要依赖RSVP这类第三方库,能轻松实现并行读取多个文件,之后在同一个.then()里拿到所有文件的内容。
先把你的readFile函数补全(你之前的代码没写完),把Node.js的fs.readFile封装成Promise形式:
const fs = require('fs'); // 封装fs.readFile为Promise,适配CSV文本读取 const readFile = (filename) => { return new Promise((resolve, reject) => { // 读取CSV时指定utf8编码,避免返回Buffer格式 fs.readFile(filename, 'utf8', (err, data) => { if (err) { // 读取失败时抛出错误 reject(err); } else { // 读取成功时返回文件内容 resolve(data); } }); }); };
接下来就可以用Promise.all()实现并行读取了:
// 替换成你的两个CSV文件路径 const csvFile1 = './first.csv'; const csvFile2 = './second.csv'; // 把两个读取任务的Promise传入Promise.all(),并行执行 Promise.all([readFile(csvFile1), readFile(csvFile2)]) .then(([content1, content2]) => { // 这里就能同时访问两个文件的内容! // 结果顺序和传入的Promise数组完全对应 console.log('第一个CSV内容:', content1); console.log('第二个CSV内容:', content2); // 在这里做后续处理,比如解析CSV、合并数据等 }) .catch((err) => { // 只要有一个文件读取失败,就会触发这里的错误捕获 console.error('读取文件出错:', err); });
核心特性说明:
Promise.all()会并行执行所有传入的Promise,不会串行等待,效率拉满- 只有当所有Promise都成功resolve时,才会进入
.then(),返回的数组结果顺序和传入的Promise数组严格对应 - 任意一个Promise读取失败(触发reject),整个
Promise.all()会立刻终止并进入.catch(),捕获第一个出现的错误
这样就完全用原生Promise实现了你要的需求,不用依赖任何第三方库~
内容的提问来源于stack exchange,提问作者Pramod K
相关产品推荐
相关产品推荐

