
如何并行调用多个 async 函数
并行执行多个 async 函数用 Promise.all([fn1(), fn2()]),函数调用先开始执行,Promise.all 在全部成功后按输入顺序返回结果,任一拒绝则提前拒绝。收集所有成败用 Promise.allSettled;race 取首次完成,any 取首次成功。
聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

并行执行多个 async 函数用 Promise.all([fn1(), fn2()]),函数调用先开始执行,Promise.all 在全部成功后按输入顺序返回结果,任一拒绝则提前拒绝。收集所有成败用 Promise.allSettled;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=false 等配置。常用的是 --save-dev(-D,写入 devDependencies)和 --save-exact(-E,锁定精确版本)。

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

删除本地分支用 git branch -d <分支名>(须合并到上游,无上游时检查 HEAD;确认可丢弃时才用 -D);删除远程分支用 git push origin --delete <分支名>。本地与远程是独立引用,按清理目标选择,删远程分支前请确认已合并或已备份。

该错误可能来自正在运行的 Git 操作,也可能是失效锁文件。先确认报错路径及写操作状态,只删除确认失效的锁文件;worktree 和自定义索引路径可能不同。

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

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