1. 异步编程的基础 -- 函数式编程
(1)高阶函数 -- 是可以把函数作为参数,或是将函数作为返回值的函数。
(2)偏函数用法 -- 创建一个调用另外一个部分 -- 参数或变量已经预置的函数 -- 的函数(通过指定部分参数来产生一个新的定制函数的形式就是偏函数)。
2. 异步编程的优势与难点
(1)优势:
基于事件驱动的非阻塞I/O模型。
(2)劣势:
A. 异常处理 -> 必须执行调用者传入的回调函数,正确传递回异常调用者判断。
B. 函数嵌套过深
C. 阻塞代码
D. 多线程编程
E. 异步转同步
3. 异步编程解决方案
(1)事件发布/订阅模式(事件监听器模式)-- 常常用来解耦业务逻辑,事件发布者无需关注订阅的侦听器如何实现业务逻辑,甚至都不用关注有多少个侦听器存在,数据通过消息的方式可以很灵活的传递。
event模块:addListener/on()、once()、removeListener()、emit()等基本的事件监听模式的方法实现。
// 订阅 emitter.on("event1",function(message){ console.log(message); }) // 发布 emitter.emit("event","I am message!");
(2)Promise/Deferred模式 -- 先执行异步调用,延迟传递处理的方式
Promise作用于外部,通过then()方法暴露给外部以添加自定义逻辑。
Deferred主要用于内部,用于维护异步模型的状态。
(3)流程控制库
A. 尾触发 应用最多的地方是Connect的中间件 -- 十分适合处理网络请求的场景。将复杂的处理逻辑拆解为简介、单一的处理单元,逐层次地处理请求对象和响应对象。
B. async -- 提供了20多个方法用于处理异步的各种协作模式
异步的串行执行
异步的并行执行
异步的调用依赖处理
自动依赖处理
C. Step -- 知名流程控制库,比async更轻量
D. wind
4. 异步并发控制
拒绝模式
超时控制