
如何并行调用多个 async 函数
并行执行多个 async 函数用 Promise.all([fn1(), fn2()]),所有任务同时启动、等待全部完成,结果按传入顺序返回。允许部分失败用 Promise.allSettled,只要第一个结果用 Promise.race/any。
聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

并行执行多个 async 函数用 Promise.all([fn1(), fn2()]),所有任务同时启动、等待全部完成,结果按传入顺序返回。允许部分失败用 Promise.allSettled,只要第一个结果用 Promise.race/any。

检查过期包用 npm outdated(显示当前版/想要版/最新版三列),更新到 semver 允许范围用 npm update,跨大版本升级用 npx npm-check-updates(ncu -u)后 npm install。更新后务必跑测试验证。

Playwright 禁用 JavaScript:在 test.use({ javaScriptEnabled: false }) 中关闭(对当前 describe 生效),或在 playwright.config.ts 的 use 里全局设置。用于验证无 JS 环境下的可访问性与渐进增强基线。

原生 http 模块处理 POST 需监听 req 的 data/end 事件拼接请求体;Express 直接用 express.json() 和 express.urlencoded() 中间件解析,req.body 直接拿数据。注意校验数据与限制请求体大小。

区分 Node.js 原生类型剥离、tsx 与 tsc 编译三条运行路径,说明版本条件、import 后缀、tsconfig 和类型检查的限制。

Node.js 读取 JSON 文件:fs.readFile 读文本后 JSON.parse 解析,或 fs.promises 配合 await。小配置文件也可直接 require('./config.json)(会缓存)。注意 JSON.parse 需 try-catch 容错。

--save 曾用于把包写入 package.json 的 dependencies;自 npm 5.0(2017 年)起这已是默认行为,--save 成为无意义的历史遗留。常用的是 --save-dev(-D,写入 devDependencies)和 --save-exact(-E,锁定精确版本)。

npm install 重写 package-lock.json 是正常行为:同步 package.json 变更、重新解析不一致的依赖树、执行安全修复或解决锁文件冲突时都会更新锁文件。想严格按锁文件安装,用 npm ci。

删除本地分支用 git branch -d <分支名>(有未合并改动时用 -D 强删);删除远程分支用 git push origin --delete <分支名>。两步缺一不可,删远程分支前请确认已合并或已备份。

该错误说明 .git 目录里残留了锁文件(通常是 index.lock)。先确认没有其他 git 进程在跑,然后删除锁文件:rm -f .git/index.lock。Windows 用 del 或资源管理器删除。

从旧提交建分支:git log 找到目标提交哈希,然后 git checkout -b <新分支名> <commit哈希>;新写法是 git switch -c <分支名> <哈希>。常用于找回旧代码、从历史点修复 bug。

Git 是版本控制工具而非备份工具:适合代码和文本文件的版本历史,不擅长二进制文件、大文件和长期归档,也不能替代异地容灾。代码"备份"请推到远程仓库,真正的数据备份用专业方案(rsync、快照、备份软件)。