⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Generator 双向通道:.return() 与 .throw() 在流控制中的高阶应用

超越简单的 yield 迭代,利用 Generator.prototype.return 和 .throw 实现外部注入的终止/异常信号,构建一个可暂停、可恢复、可清理的资源管理器。 · 难度:入门 · +10XP

Generator 双向通道:.return() 与 .throw() 在流控制中的高阶应用

Generator 函数不仅可以通过 yield 向外发送值,还可以通过 next(val) 向内注入值。但很少人使用 .return() 和 .throw() 方法——它们允许外部强制终止生成器或注入异常。本教程将设计一个 ResourceManager 生成器,它管理文件句柄或连接池,当调用 .return() 时自动执行清理逻辑(finally 块),而 .throw() 可用于模拟外部中断(如用户取消)。我们还将实现一个“双向 RPC”风格,生成器内部 yield 一个问题,外部通过 next(answer) 回答,形成对话式流程。

function* resourceManager() {
  try {
    const resource = { id: 1 };
    console.log('资源已分配');
    const command = yield resource;
    if (command === 'close') {
      console.log('外部要求关闭');
      return 'cleaned';
    }
  } finally {
    console.log('清理资源');
  }
}
const gen = resourceManager();
gen.next(); // 分配资源
const result = gen.return('外部终止'); // 触发 finally
console.log(result.value); // 'cleaned'
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 231 篇
0 完成
🔥 0