我想知道我的小型node脚本是否过于使用async/await,或者使用得太多了。我的目标是尝试尽可能并行地查找和解析尽可能多的文件,我认为这样会更快。
我的node脚本遍历一个目录及其子目录,并寻找.docx文件。当它找到它们时,它通过Mammoth将它们转换为.html文件。它只是将它们放在类似的目录结构中。
我的代码可以工作,但我是否过度使用了async/await?有没有可以消除它们使用的地方,因为我使用它们的理由不存在?
const createTempDirs = async (catMap) => {
try {
const dirPromises = catMap.map((cat) => fs.mkdir(`issue/${cat.abv}`, {
recursive: true,
}));
await Promise.all(dirPromises);
} catch (error) {
console.log(error);
}
};
const writeToFile = (fileName) => {
return async (result) => {
//return await fs.writeFile(`issue/${fileName.replace('.docx', '.html')}`);
try {
const [
,
category,
...parts
] = fileName.split(' ');
await createTempDirs(catMap),
await fs.writeFile(`issue/${getShortCatName(category)}/${fileName.replace('.docx', '.html')}`, result.value);
} catch (error) {
console.log(error);
}
};
}
const fileToHTML = async (file, dirPath) => {
try {
const fileDetails = await fs.lstat(dirPath + file);
if (fileDetails.isDirectory()) {
walkDir(dirPath + addTrailingSlash(file));
}
if (!fileDetails.isDirectory() && path.extname(file) === '.docx') {
mammoth.convertToHtml({
path: dirPath + file,
}, conversionOptions).then(writeToFile(file));
}
} catch (error) {
console.log(error);
}
};
const processFiles = async (files, dirPath) => {
try {
const filePromises = files.map(file => fileToHTML(file, dirPath));
return await Promise.all(filePromises);
} catch (error) {
console.log(error);
}
};
const walkDir = async (dirPath) => {
try {
const files = await fs.readdir(dirPath);
processFiles(files, dirPath);
} catch (error) {
console.log(error);
}
};
walkDir(dirPath);
try
/catch
。当出现错误时,你究竟想要发生什么?你想要停止当前文件解析、停止当前目录解析、停止整个脚本,还是其他什么? - CertainPerformance