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