Node.js fs 文件系统模块 四种读写方案全解析
📅 2026/7/11 2:03:13
👁️ 次浏览
fs是 Node 内置文件系统模块用于读写文件、操作文件夹。JS 是单线程语言fs 提供同步阻塞、回调异步、Promise、async/await 四种写法一步步解决异步嵌套带来的回调地狱问题。一、模块导入两种方式基础 fs提供同步 API、回调风格异步 APIjs运行import fs from fs;fs/promises专门提供 Promise 风格 API适配 async/await推荐生产使用js运行import fs from fs/promises;二、方案 1同步读取 readFileSync阻塞主线程特点代码顺序执行文件读取期间阻塞整个线程不适合接口、循环大量 IO仅适合项目启动一次性读取配置文件。js运行import fs from fs; const syncData fs.readFileSync(./test.txt, utf-8); console.log(syncData);缺点并发场景大量文件读写会严重降低服务性能。三、方案 2回调异步 readFileES6 原生写法回调地狱Node 统一错误优先回调规范(err, data) {}读取成功err nulldata 为文件内容读取失败err 为错误对象文件不存在、权限不足等串行读取多个文件时会产生多层嵌套即回调地狱维护成本极高。js运行import fs from fs; fs.readFile(./file1.txt, utf-8, (err, data) { if (!err) { console.log(file1, data); } else { console.log(err); } fs.readFile(./file2.txt, utf-8, (err, data) { if (!err) { console.log(file2, data); } else { console.log(err); } fs.readFile(./file3.txt, utf-8, (err, data) { if (!err) { console.log(file3, data); } else { console.log(err); } }) }) })四、方案 3Promise 链式调用消除嵌套基于fs/promisesreadFile 返回 Promise使用.then()链式串行执行解决多层嵌套问题缺点是多文件场景重复书写 then代码冗余。js运行import fs from fs/promises; fs.readFile(./file1.txt, utf-8) .then(data { console.log(file1, data); return fs.readFile(./file2.txt, utf-8); }) .then(data { console.log(file2, data); return fs.readFile(./file3.txt, utf-8); }) .then(data { console.log(file3, data); })五、方案 4async/awaitES8 最优方案生产首选async/await 是 Promise 的语法糖底层依旧异步、不会阻塞主线程代码线性自上而下书写可读性最强。限制await 只能写在 async 函数内顶层直接 await 会报错使用 IIFE 立即执行函数包裹。补充Promise、await 属于微任务setTimeout 属于宏任务。js运行import fs from fs/promises; (async () { const file1Data await fs.readFile(./file1.txt, utf-8); console.log(file1, file1Data); const file2Data await fs.readFile(./file2.txt, utf-8); console.log(file2, file2Data); const file3Data await fs.readFile(./file3.txt, utf-8); console.log(file3, file3Data); })();完整健壮写法增加 try/catch 捕获读取错误js运行import fs from fs/promises; (async () { try { const data await fs.readFile(./test.txt, utf-8); console.log(data); } catch (err) { console.error(文件读取失败, err); } })();六、异步代码演进路线同步阻塞性能差→ 回调函数回调地狱→ Promise then 链式冗余→ async/await简洁易维护七、四种读取方式对比表表格写法是否阻塞线程优点缺点readFileSync阻塞写法极简大量 IO 严重影响服务性能readFile 回调非阻塞无需额外导入串行多文件产生回调地狱Promise then非阻塞无嵌套结构多文件链式代码重复繁琐async await非阻塞线性阅读代码整洁ES8 语法需 async 函数包裹八、工程开发最佳实践业务文件读写统一使用fs/promises async/await所有文件读取必须搭配 try/catch 捕获异常同步 readFileSync 仅用于项目初始化加载配置接口业务禁止使用路径搭配 path.resolve 生成绝对路径防止运行目录变更导致文件找不到。
黄金分割法:从数学之美到优化实践在数值优化的世界里,黄金分割法以其优雅的数学原理和高效的搜索能力,成为解决单峰函数极值问题的经典方法。这个方法不仅体现了数学中的黄金比例在现实问题中的应用价值,更为我们提供了一种无需导…
📅 2026/7/11 2:03:13
Zephyr RTOS 设备驱动模型全链路解析:从 devicetree 节点绑定到 driver API 注册的每一个寄存器操作
一、当 SPI 屏幕在 Zephyr 上不显示:驱动模型理解不足的根本原因
在 Zephyr RTOS 项目中最常见的故障报修是"同样的硬件,裸机驱动正…
📅 2026/7/11 2:03:13
1. 音频处理系统的核心组件解析 在构建高性能音频处理系统时,TDA7468音频处理器与STM32L162ZE微控制器的组合提供了一个极具性价比的解决方案。这套系统特别适合需要数字控制模拟音频信号处理的应用场景,如专业音频设备、车载音响系统和智能家居音频中心…
📅 2026/7/11 2:02:13
Matlab R2014a 一阶系统响应:3种极点位置对阶跃/脉冲响应的影响对比在自动控制系统的分析与设计中,理解系统极点位置对动态响应的影响至关重要。本文将聚焦一阶系统在左半平面、右半平面及原点三种极点位置下的阶跃与脉冲响应特性,通过Matlab…
📅 2026/7/11 10:17:10
3分钟快速恢复:为Windows 11 LTSC系统完整安装微软商店的高效方案 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore
你是否正在使用Windows …
📅 2026/7/11 10:17:10
Competitive Companion:提升算法竞赛开发效率的浏览器扩展 【免费下载链接】competitive-companion Browser extension which parses competitive programming problems 项目地址: https://gitcode.com/gh_mirrors/co/competitive-companion
在算法竞赛的激烈…
📅 2026/7/11 10:17:10
1. 为什么非得用QEMU模拟CXL——不是替代方案,而是唯一路径CXL(Compute Express Link)这东西,现在连实验室里摸到真板子的人都不多。我去年在一家做数据中心加速卡的公司参与预研,团队拿到的第一块CXL 2.0开发套件&…
📅 2026/7/11 10:17:10
永磁同步电机三大坐标系模型深度对比:从理论方程到控制策略选择 在电机控制领域,坐标系的选择直接影响着算法的复杂度和系统性能。当我们面对永磁同步电机(PMSM)控制时,工程师常需要在自然坐标系(ABC)、静止坐标系(α-β)和旋转坐标系(d-q)之…
📅 2026/7/11 10:17:10
更多请点击:
https://intelliparadigm.com
第一章:从“规则驱动”到“目标驱动”的范式革命 传统软件系统长期依赖显式编码的规则——如 if-else 分支、正则匹配、状态机跳转等,将业务逻辑固化在代码中。这种“规则驱动”范式虽可预测、易调…
📅 2026/7/11 10:16:09
摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计…
📅 2026/7/11 0:00:31
1. 命令简介gpm 是 Linux 系统下运行于虚拟控制台(文字终端模式)的鼠标服务器。它的主要功能是在没有图形界面的纯文本环境中,为虚拟控制台提供鼠标支持,允许用户使用鼠标进行文本的选择、复制和粘贴操作,极大地提升了…
📅 2026/7/11 0:00:31
导语
先澄清一个常被混用的概念:BI试点"上线",并不等于试点"验收通过"。很多企业把仪表板做出来、账号发下去、培训开完场,就默认试点已经跑通,随后进入推广阶段——结果推广到第二个部门、第三个业务线时&am…
📅 2026/7/11 0:00:31
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/10 22:46:54
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/10 22:46:54
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/10 22:46:54
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/10 22:46:54
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/10 22:46:54
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/10 22:46:54