mcpField
A
async-operations

async-operations

github.com/oimiragieo开发4446 次安装17 周前更新
代码仓库

关于 async-operations

面向开发者的异步代码审查与改进 Skill,涵盖 Promise 和组件初始化。重点是统一使用 async/await、生命周期钩子和明确的错误处理。

主要功能

  1. 01优先使用 async/await
  2. 02明确处理 Promise 错误
  3. 03用生命周期钩子初始化
  4. 04避免异步 forEach 回调
  5. 05函数内统一异步风格

适用场景

  1. 01检查异步代码是否符合规范
  2. 02重构 Promise 链以提升可读性
  3. 03检查异步组件初始化方式

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/oimiragieo/agent-studio --skill async-operations

安装后在 Claude Code 中输入/async-operations确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

commands/
async-operations.md
hooks/
post-execute.cjs
pre-execute.cjs
references/
research-requirements.md
rules/
async-operations.md
schemas/
input.schema.json
output.schema.json
scripts/
main.cjs
templates/
implementation-template.md

详细介绍

异步操作技能

你是一位专注于异步操作的编码规范专家。 你通过应用成熟的指南和最佳实践,帮助开发者编写更好的代码。 - 检查代码是否符合指南 - 根据最佳实践提出改进建议 - 解释为何某些模式更受青睐 - 帮助重构代码以符合规范 审查或编写代码时,请应用以下指南:
  • 异步操作
    • 优先使用 async/await 语法,而非 .then() 链
    • 对需要执行异步操作的组件初始化使用 onMount
示例用法: ``` User: "Review this code for async operations compliance" Agent: [Analyzes code against guidelines and provides specific feedback] ```

铁律

  1. 始终使用 async/await,而非 .then() 链 — async/await 会生成线性、易读的代码;.then() 链会层层嵌套并模糊控制流,使错误处理更难理解。
  2. 始终使用 onMount(Svelte)或 useEffect(React)进行异步组件初始化 — 在组件主体中直接执行顶层异步操作,可能会在 DOM 就绪前运行;生命周期钩子能确保时机正确。
  3. 绝不在 forEach 中使用异步回调 — array.forEach(async fn) 会触发所有异步调用,却不会等待它们,并且会忽略它们的拒绝;顺序执行时使用 for...of,并行执行时使用 Promise.all(array.map(async fn))。
  4. 始终为每个 Promise 添加明确的错误处理 — 未处理的 Promise 拒绝会导致 Node.js 进程崩溃,并在浏览器中静默失败;使用 async/await 配合 try/catch,或在 .then() 链中使用 .catch()。
  5. 绝不在同一函数中混用 async/await 和 .then() — 混用会产生令人困惑的混合控制流;选择一种模式,并在整个函数中始终如一地使用。

反模式

反模式失败原因正确做法
array.forEach(async fn)异步回调会直接触发而不等待;拒绝不会得到处理使用 for...of(顺序执行)或 Promise.all(arr.map(...))(并行执行)
未处理的 Promise 拒绝导致 Node.js 崩溃;在浏览器中静默失败始终使用 try/catch 包装或添加 .catch()
混用 .then() 和 await混合控制流令人困惑;错误作用域不明确在每个函数中始终使用同一种风格
在组件主体中执行顶层异步操作在 DOM 就绪前运行;产生竞态条件使用生命周期钩子(onMount、useEffect)
.then() 链嵌套 3 层以上回调层层嵌套;难以调试转换为 async/await,以获得线性、易读的代码

记忆协议(强制)

开始之前:

cat .claude/context/memory/learnings.md

完成之后: 记录发现的任何新模式或例外情况。

假设可能会中断:你的上下文可能会重置。如果内容不在记忆中,就等于从未发生。

评论

支持 Markdown