Node.js 中 fs.promises API 配合 async/await 可实现简洁、可读性强的异步文件操作,支持 readFile、writeFile、mkdir 等方法直接返回 Promise,便于 try/catch 统一错误处理和顺序执行,但需注意路径兼容性、大文件流式处理等细节。

JavaScript 本身不直接支持文件 I/O,但在 Node.js 环境中可通过 fs.promises API 配合 async/await 实现简洁、可读性强的异步文件操作。
使用 fs.promises 替代回调或 Promise.then()
Node.js 从 v10 起内置 fs.promises 模块,所有文件方法(如 readFile、writeFile、mkdir)都返回 Promise,天然适配 await。
- 无需手动包装
fs.readFile成 Promise,避免冗余代码 - 比
.then().catch()更直观,错误可用try/catch统一处理 - 示例:读取 JSON 文件并解析
import { readFile } from 'fs/promises';
async function loadConfig() {
try {
const data = await readFile('./config.json', 'utf8');
return JSON.parse(data);
} catch (err) {
console.error('读取配置失败:', err.message);
throw err;
}
}
顺序执行多个文件操作
当需要按顺序读、写、重命名或创建目录时,await 让流程线性清晰,避免“回调地狱”或嵌套 Promise 链。
- 每个
await会等待前一步完成再执行下一步 - 适合日志写入、模板渲染后保存、配置生成等典型场景
- 注意:若操作可并行(如同时读多个文件),应改用
Promise.all()
import { readFile, writeFile, mkdir } from 'fs/promises';
async function generateReport() {
const content = await readFile('input.txt', 'utf8');
const result = content.toUpperCase();
await mkdir('./output', { recursive: true });
await writeFile('./output/report.txt', result);
}
处理常见文件操作类型
不同操作对应不同方法,全部支持 await,关键参数保持与传统 fs 一致。
立即学习“Java免费学习笔记(深入)”;
-
读文件:
readFile(path, options?)— 支持编码(如'utf8')或返回Buffer -
写文件:
writeFile(path, data, options?)— 自动创建路径中不存在的目录需额外调用mkdir(..., {recursive:true}) -
检查与删除:
access(path)判断权限或存在性;unlink(path)删除文件;rmdir(path, {recursive:true})删除非空目录 -
读目录:
readdir(path)返回文件名数组,常配合map+await批量处理
注意事项与最佳实践
看似简单,但几个细节容易出错:
- 确保在
async函数内使用await,否则会得到未决 Promise - 路径建议用
path.join()或fileURLToPath构建,避免跨平台路径问题 - 大文件慎用
readFile(全量加载到内存),应改用createReadStream流式处理 - TypeScript 用户可导入
fs.promises类型声明,获得完整类型提示


















