Generator 与异步状态机:手动控制 async/await 底层逻辑
不依赖 async/await,用 Generator + Promise 构建自己的协程调度器,彻底理解事件循环与异步流程控制。 · 难度:入门 · +10XP
Generator 与异步状态机:手动控制 async/await 底层逻辑
async/await 本质上是 Generator 函数的语法糖。本课程将带你自己实现一个微型协程引擎:从 Generator 的特性(惰性求值、双向传参、内部状态保存)出发,设计一个 run 函数,使 Generator 能够自动迭代 Promise。你还会学到如何处理并行任务、错误传播、取消异步操作等高级主题,从而真正理解 JavaScript 异步模型的精髓。
function run(generatorFunc) {
const iter = generatorFunc();
function handle(result) {
if (result.done) return result.value;
return Promise.resolve(result.value).then(
val => handle(iter.next(val)),
err => handle(iter.throw(err))
);
}
return handle(iter.next());
}
run(function* () {
const a = yield Promise.resolve(5);
const b = yield Promise.resolve(10);
return a + b;
}).then(console.log); // 15