生成器是JavaScript中一种特殊函数通过function语法定义能够暂停和恢复执行生成器函数返回生成器对象通过yield关键字暂停执行并返回值每次调用next方法从上次暂停位置继续执行生成器内部维护执行上下文可通过yield委托给其他生成器协程是轻量级并发模型生成器实现了协程概念与线程不同协程是协作式用户空间实现切换开销小生成器简化异步编程结合Promise实现同步风格代码天然实现迭代器协议可与迭代语法配合使用支持双向通信通过next接收输入实现状态机Nodejs中广泛应用如Koa框架处理中间件流程处理数据流控制内存使用性能上生成器创建切换比函数调用开销大V8引擎优化但仍需注意热代码路径生成器提供完善错误处理通过throw方法注入错误内部trycatch处理
发布订阅模式是一种消息传递范式发布者将消息分类发布到特定频道订阅者可以订阅感兴趣的消息实现双方解耦Nodejs中常用事件处理和实时通信内置EventEmitter提供基础实现支持同步触发和错误处理Redis的PubSub适合分布式系统跨进程通信支持模式匹配高级实现可管理订阅取消订阅和错误处理实际应用于微服务通信实时通知和插件系统性能方面需注意内存泄漏和错误处理最佳实践与其他模式相比发布订阅完全解耦现代JavaScript变体包括ReactContext和RxJS实现
事件发射器模式是Nodejs处理异步事件的核心机制它允许对象发布命名事件其他对象可以监听并响应这种模式解耦了事件触发器和处理器使代码更模块化Nodejs的events模块提供了EventEmitter类作为基础继承它的对象可以成为事件发射器主要方法包括emit触发事件和on添加监听器事件发射器同步执行监听器支持一次性监听器必须处理error事件否则会抛出异常高级用法包括获取监听器信息移除监听器设置最大监听器数量实际应用场景包括HTTP服务器流处理和自定义事件总线性能考虑包括避免内存泄漏和批量操作优化与其他模式相比事件发射器比回调更灵活适合处理多个离散事件而Promise更适合单次操作可以通过继承扩展EventEmitter功能浏览器中也可实现类似概念测试时可用模拟或间谍函数
回调地狱指异步编程中多层嵌套回调导致代码难以维护的现象Nodejs异步IO模型依赖回调当多个操作顺序执行时会形成金字塔结构影响可读性Promise通过链式调用解决嵌套问题提供then和catch方法处理状态asyncawait语法让异步代码拥有同步书写体验返回Promise并用await等待完成错误处理需注意异常传播高级控制流包括并行执行竞速模式和有限并发事件发射器模式适合持续监听事件流性能优化需避免过多Promise链和递归调用不当并发控制可能造成资源耗尽
Nodejs作为异步事件驱动运行时其错误处理机制与传统同步编程差异显著合理策略能提升应用稳定性避免未捕获异常导致进程崩溃常见处理模式包括回调函数的errorfirst方式优先检查err参数Promise通过catch捕获异常asyncawait使用trycatch块事件发射器需监听error事件进程级通过uncaughtException和unhandledRejection捕获全局错误可创建自定义错误类型附加调试信息有效日志应结构化包含调用链信息HTTP服务返回标准化错误响应4xx表示客户端错误5xx服务端错误暂时性错误可实施重试机制集成监控工具实时追踪错误测试需覆盖错误场景防御性编程预防错误发生Express框架可采用集中式错误处理中间件
asyncawait是Generator函数的语法糖基于Promise实现让异步代码看起来像同步代码async函数返回Promise对象await后面通常是Promise对象async函数内部可以使用await表达式暂停执行等待Promise解决错误处理可以用trycatch或Promise的catch方法并行执行多个异步操作时使用Promiseall更高效async函数执行顺序中await会暂停函数但不阻塞事件循环在循环中使用await需注意顺序执行与并行执行的区别async函数与Promise无缝协作常见于API调用链文件处理等场景性能上要避免不必要的await合理并行化操作async函数可作为类方法使用相比生成器函数更专注异步控制在Nodejs中常用于文件操作数据库查询等IO任务也可与事件发射器Express路由流处理等结合使用简化异步流程控制
JavaScript中的Promise是处理异步操作的重要机制它有三种状态pending初始状态fulfilled操作成功rejected操作失败状态一旦改变不可逆创建Promise需要传入执行器函数包含resolve和reject方法Promise支持链式调用通过then方法连接多个异步操作错误处理使用catch方法捕获链中任何错误Promise提供静态方法如all等待所有完成race返回第一个完成allSettled等待所有完成无论成功失败在Nodejs中Promise常用于文件操作数据库查询等场景还可将回调函数转换为Promise或自定义Promise实现理解Promise原理有助于编写高效可维护的异步代码
Nodejs回调函数模式是其异步编程的核心机制通过将函数作为参数传递实现操作完成后的执行回调通过事件循环工作异步操作放入队列完成后执行回调Nodejs采用错误优先回调模式首参为错误对象多个异步操作嵌套会导致回调地狱可通过命名函数或控制流库解决核心模块如文件系统和网络广泛使用回调模式需注意性能问题避免同步操作阻塞事件循环虽然现代推荐Promise和asyncawait但理解回调仍很重要因其存在于遗留代码和某些场景进阶模式包括可取消回调和多回调支持最佳实践包括错误检查避免异常抛出保持简单和文档化
Nodejs的事件循环是异步编程的核心机制由多个阶段组成包括TimersPending callbacksIdlePreparePollCheck和Close callbacksNodejs提供了内置API如process_getActiveRequests和perf_hooks模块用于监控事件循环第三方工具如Clinicjs和0x可帮助开发者深入分析事件循环性能开发者可以自定义监控系统如事件循环延迟检测和Promise执行跟踪生产环境中可集成OpenTelemetry和Kubernetes健康检查高级调试技巧包括阻塞操作定位和微任务队列监控最后可通过Grafana展示事件循环指标实现可视化监控
浏览器事件循环基于HTML5规范处理DOM事件用户交互网络请求等异步任务包含调用栈任务队列微任务队列Nodejs事件循环基于libuv分为多个阶段如timerspending callbackspollcheck等两者在微任务执行时机任务优先级上有明显差异浏览器中微任务在每个宏任务后立即执行而Nodejs在阶段转换时执行Nodejs特有processnextTick优先级高于Promisethen两种环境对定时器I/O处理也有不同浏览器有4ms最小延迟Nodejs无此限制Nodejsv11后微任务执行与浏览器对齐实际开发中需注意这些差异对动画处理异步流程控制的影响性能方面浏览器需考虑UI响应Nodejs注重IO吞吐量调试时浏览器用开发者工具Nodejs可用asynchooks模块监控异步资源