MST

星途 面试题库

面试题:Node.js 文件系统批量操作的错误处理优化

在Node.js中进行文件系统的批量操作,比如批量删除某个目录下的所有文件。当其中一个文件删除失败时,要确保后续文件继续删除,并且最终能够返回所有操作的详细结果(哪些文件成功删除,哪些失败及失败原因)。请用Promise或async/await实现该功能,并详细说明错误处理机制。
35.4万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
const fs = require('fs');
const path = require('path');
const util = require('util');

const unlink = util.promisify(fs.unlink);
const readdir = util.promisify(fs.readdir);

async function batchDeleteFiles(directory) {
    let results = [];
    try {
        const files = await readdir(directory);
        for (const file of files) {
            const filePath = path.join(directory, file);
            try {
                await unlink(filePath);
                results.push({ file: filePath, success: true });
            } catch (error) {
                results.push({ file: filePath, success: false, error: error.message });
            }
        }
    } catch (error) {
        results.push({ error: error.message });
    }
    return results;
}

// 使用示例
batchDeleteFiles('/your/directory/path')
   .then(results => {
        console.log('操作结果:', results);
    })
   .catch(error => {
        console.error('整体操作出错:', error.message);
    });

错误处理机制说明

  1. 外层try - catch:用于捕获readdir操作可能出现的错误,比如目录不存在等。如果发生错误,将错误信息记录到results数组中并返回。
  2. 内层try - catch:在删除每个文件时,为了确保一个文件删除失败不影响其他文件的删除操作,使用try - catch块。如果删除文件成功,将该文件的路径和成功标志记录到results数组;如果删除失败,将文件路径、失败标志以及错误信息记录到results数组。
  3. 返回结果:最终返回的results数组包含了所有文件的操作结果,无论是成功还是失败都有详细记录,方便调用者了解整个批量操作的情况。