关于 async-patterns
async-patterns 是面向 Node.js 开发者的异步编程学习 Skill,涵盖 JavaScript 回调、Promise 和 async/await 等模式。内容还涉及错误处理、并发控制、流与事件驱动编程。
主要功能
- 01回调、Promise 与 async/await
- 02顺序与并行任务处理
- 03Promise 组合方法
- 04异步错误处理与重试
- 05并发限制、流与事件发射器
适用场景
- 01学习 Node.js 异步编程基础
- 02并发处理文件、网络或数据库 I/O
- 03为异步操作设计错误恢复逻辑
- 04使用流处理数据并控制背压
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-nodejs --skill async-patterns安装后在 Claude Code 中输入/async-patterns确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/config.yamlreferences/GUIDE.mdscripts/helper.py详细介绍
异步编程模式技能
掌握异步编程——这是 Node.js 性能与可扩展性的基础。
快速入门
异步 JavaScript 的三大支柱:
- 回调 - 传统模式(错误优先)
- Promise - 现代链式模式
- Async/Await - 看起来像同步代码的异步代码
核心模式
从回调到 Promise 再到 Async/Await 的演进
// 1. Callbacks (old way)
fs.readFile('file.txt', (err, data) => {
if (err) throw err;
console.log(data);
});
// 2. Promises (better)
fs.promises.readFile('file.txt')
.then(data => console.log(data))
.catch(err => console.error(err));
// 3. Async/Await (modern)
async function readFile() {
try {
const data = await fs.promises.readFile('file.txt');
console.log(data);
} catch (err) {
console.error(err);
}
}
顺序执行与并行执行
// ❌ Slow: Sequential (300ms total)
async function slow() {
const a = await fetch('/api/a'); // 100ms
const b = await fetch('/api/b'); // 100ms
const c = await fetch('/api/c'); // 100ms
return [a, b, c];
}
// ✅ Fast: Parallel (100ms total)
async function fast() {
const [a, b, c] = await Promise.all([
fetch('/api/a'),
fetch('/api/b'),
fetch('/api/c')
]);
return [a, b, c];
}
Promise 方法
// Promise.all - Wait for all (fails if one fails)
const [users, posts] = await Promise.all([getUsers(), getPosts()]);
// Promise.allSettled - Wait for all (never fails)
const results = await Promise.allSettled([fetch1(), fetch2(), fetch3()]);
// Promise.race - First to complete
const fastest = await Promise.race([server1(), server2()]);
// Promise.any - First to succeed
const result = await Promise.any([tryAPI1(), tryAPI2()]);
学习路径
初级(1-2 周)
- ✅ 理解事件循环
- ✅ 掌握回调
- ✅ 学习 Promise 基础
- ✅ 练习 async/await
中级(3-4 周)
- ✅ 错误处理模式
- ✅ 顺序执行与并行执行
- ✅ Promise 组合
- ✅ 事件发射器
高级(5-6 周)
- ✅ 流与背压
- ✅ 并发控制
- ✅ 熔断器
- ✅ 性能优化
常见模式
错误处理
// Try/catch for async/await
async function safeOperation() {
try {
const result = await riskyOperation();
return { success: true, data: result };
} catch (error) {
console.error('Operation failed:', error);
return { success: false, error: error.message };
}
}
// Process-level handlers
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection:', reason);
});
使用指数退避进行重试
async function retryWithBackoff(fn, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await fn();
} catch (error) {
if (i === maxRetries - 1) throw error;
const delay = Math.pow(2, i) * 1000;
await new Promise(resolve => setTimeout(resolve, delay));
}
}
}
并发限制
async function batchProcess(items, concurrency = 5) {
const results = [];
for (let i = 0; i < items.length; i += concurrency) {
const batch = items.slice(i, i + concurrency);
const batchResults = await Promise.all(
batch.map(item => processItem(item))
);
results.push(...batchResults);
}
return results;
}
流
const { pipeline } = require('stream');
const fs = require('fs');
// Efficient file processing
pipeline(
fs.createReadStream('input.txt'),
transformStream,
fs.createWriteStream('output.txt'),
(err) => {
if (err) console.error('Pipeline failed:', err);
else console.log('Pipeline succeeded');
}
);
事件发射器
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const emitter = new MyEmitter();
emitter.on('event', (data) => {
console.log('Event fired:', data);
});
emitter.emit('event', { id: 123 });
适用场景
在以下情况下使用异步模式:
- 处理 I/O 操作(文件、网络、数据库)
- 构建可扩展的 Node.js 应用程序
- 管理多个并发操作
- 处理数据流
- 创建事件驱动架构
相关技能
- Express REST API(异步路由处理程序)
- 数据库集成(异步查询)
- 测试与调试(测试异步代码)
- 性能优化(异步性能)
资源
评论
支持 Markdown