co 库自动执行 Generator 函数,将其异步操作(Promise、数组、对象、Thunk)统一转为 Promise 并处理错误;只需 yield 异步任务,co 返回 Promise,支持外层 catch 或内部 try/catch。

Generator 配合 co 库自动执行,核心就一条:把异步操作包装成 Promise(或 Thunk),丢给 yield,co 会帮你一步步调用 next()、等结果、传值、捕获错误,最后返回一个 Promise。
co 的作用就是代替你手动写执行器
Generator 函数本身不会自动运行,它只返回一个迭代器。你得反复调用 iterator.next(),根据 value 是 Promise 还是普通值,决定是继续执行还是等待异步完成——这个重复逻辑,co 全包了。
- 你只需写
function* () { ... },里面用yield promise - 把函数传给
co(fn),它立刻开始执行,并返回一个 Promise - 这个 Promise 在 Generator 正常结束时 resolve,在任意
yield抛错时 reject
yield 后面能跟什么?
co 支持多种 yield 值类型,自动适配不同场景:
-
单个 Promise:
const data = yield fetch('/api/user')→ 等待 resolve,结果赋给data -
Promise 数组:
const [a, b] = yield [fetch('/a'), fetch('/b')]→ 并发请求,按顺序返回结果 -
Promise 对象:
const { user, posts } = yield { user: api.getUser(), posts: api.getPosts() }→ 并行执行,结构化解构 -
Thunk 函数(兼容老写法):
yield function(cb) { fs.readFile('file.txt', cb) }→ co 自动传入回调,转为 Promise
错误处理很自然
co 把整个 Generator 当作一个整体来处理异常。任何一步出错,都会被 catch 到,不需要每层都写 try/catch 或 if(err) return。
-
yield Promise.reject(new Error('oops'))→ 整个 co 返回的 Promise 被 reject - 可以在外层统一用
.catch()处理,也可以在 Generator 内部用try...catch捕获局部错误 - 注意:Generator 内抛出的同步错误(比如
throw new Error())也会被 co 捕获并 reject
实际用起来很简单
安装后直接引入,写法接近同步代码:
(示例)const co = require('co');co(function* () { const user = yield fetch('/user').then(r => r.json()); const posts = yield fetch(`/posts?uid=${user.id}`).then(r => r.json()); return { user, posts };}).then(console.log).catch(console.error);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











