异步编程
深入浅出node.js第四章
1. 函数式编程
高阶函数(传入或输出函数的函数)
偏函数( Curry化 )
function addParams(baseFun, fn) { //工厂方法
var slice = Array.prototype.slice,
baseFunArgsCount = baseFun.length,
superFun = function() {
var oldArgs = slice.call(arguments, 0, baseFunArgsCount),
moreArgs = slice.call(arguments, baseFunArgsCount),
ret = baseFun.apply(this, oldArgs);
if (moreArgs.length > 0) {
ret = fn.call(this, superFun, ret, moreArgs);
}
return ret;
};
return superFun;
}
function getMore(fn, ret, args) { //辅助方法
return [ret].concat(fn.apply(this, args));
}
function $el(id) { //基础方法
return document.getElementById(id);
}
//通过ID取元素们
window._$el = addParams($el, getMore);
/*
<div id="doc">
<div id="hd"></div>
<div id="bd"></div>
<div id="ft"></div>
</div>
_$el('doc') //<div id="doc">…</div>
_$el('hd', 'ft') //[<div id="hd">…</div>, <div id="ft">…</div>]
_$el('doc', 'hd', 'ft') //[<div id="doc">…</div>, <div id="hd">…</div>, <div id="ft">…</div>]
*/
2.异步编程的优势和难点
优势
- 非阻塞I/O
- 并行处理能力
- 充分发挥CPU、I/O资源
难点
-
异常处理(callback执行时机)
- 函数嵌套过深(node的callback机制)
- 不能阻塞代码(同步式编程习惯)
- 多线程编程(Web Workers)
- 异步转同步
异步编程解决方案
- 事件发布/订阅
- Promise/Deferred模式
- 流程控制库
书里设计到的工具思路
- events.EventEmitter
- EventProxy
- Promise/Deferred
- 尾触发 /NEXT
- async
- Step
- wind
-
Bagpipe
总结
回调
事件
流程
串行、并行、依赖管理、阻塞式思路进行异步编程
并发控制
nodejs-c4
By 胡尊杰
nodejs-c4
深入浅出node.js学习
- 836