多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 前言 本文节选朴灵《深入浅出的nodejs》第四章异步编程,整理加分析而得。 ## 异步编程难点 ### 1 异常处理 我们通常用try catch进行异常捕获,但是异步编程包括两个阶段,提交请求和处理,而方法通常在请求后立即返回,但是异常可能发生在处理阶段,这时的捕获异常没有作用。所以常规建议如下: Node约定一般在回调函数中将异常作为第一个实参返回,如果为空值,代表没有异常抛出。 在编写异步方法时,只要将异常传递给回调方法即可,不用过多处理。 ### 2 函数嵌套过深 在node中,存在很多事务互相依赖的关系,所以每个依赖都要写到其内部的回调函数中。 ### 3 阻塞代码 Js中没有休眠的线程,要进行延时的操作只能用定期函数,但这样会持续占用内存。 ### 4 多线程编程 一般认为js是单线程进行的代码,但是nodejs是可以运用webworkers更好的利用多核多线程来操作提升体验的。 ### 5异步转同步 目前node大部分都是异步的逻辑,偶尔出现的同步需求比较难操作。 ## 解决方案 ### 事件发布订阅机制 事件监听模式是回调函数的事件化,又称发布订阅模式。node自身的event模块就是这个模式的一个简单实现,node中很多模块都继承它,它比dom中的事件简单,不存在冒泡,默认事件等控制事件传递的方法。 示例代码如下: 订阅 Emitter.on 发布 典型实例http模块 ### promise,deferred模式 使用事件的方式,执行流程需要被预先设定, ### 流程控制库