使用Promise.all编写一个异步函数来从所有.csv文件导入数据可以按照以下步骤进行:
fs
模块用于文件读取和csv-parser
用于解析CSV文件。readCsv
函数,该函数将使用Promise包装文件读取和解析CSV数据的过程。该函数将接受一个文件路径作为参数,并返回一个Promise对象。readCsv
函数中,使用fs
模块读取文件,并使用csv-parser
解析CSV数据。importData
,该函数将接受一个包含文件路径的数组作为参数。importData
函数中,使用map
方法遍历文件路径数组,并对每个文件路径调用readCsv
函数,返回一个Promise数组。Promise.all
将Promise数组传递给它,并等待所有Promise都解析完成。Promise.all
的回调函数中,获取解析后的CSV数据数组,并进行相应的处理操作,例如插入数据库、转换格式等。以下是一个使用Node.js编写的示例代码:
const fs = require('fs');
const csv = require('csv-parser');
function readCsv(filePath) {
return new Promise((resolve, reject) => {
const results = [];
fs.createReadStream(filePath)
.pipe(csv())
.on('data', (data) => results.push(data))
.on('end', () => resolve(results))
.on('error', (error) => reject(error));
});
}
async function importData(filePaths) {
try {
const promises = filePaths.map(filePath => readCsv(filePath));
const results = await Promise.all(promises);
// 处理解析后的CSV数据
// ...
return results;
} catch (error) {
console.error(error);
throw error;
}
}
// 调用示例
const filePaths = ['file1.csv', 'file2.csv', 'file3.csv'];
importData(filePaths)
.then(results => {
console.log(results);
})
.catch(error => {
console.error(error);
});
在上述示例中,我们使用了fs
模块的createReadStream
方法来读取文件,并使用csv-parser
模块解析CSV数据。通过将文件读取和解析封装在readCsv
函数中,并使用Promise包装,我们可以方便地处理多个CSV文件的导入操作。最后,使用Promise.all
等待所有文件的Promise都解析完成,并对解析后的数据进行进一步处理。
领取专属 10元无门槛券
手把手带您无忧上云