读源码---thunkify
2016-08-15 16:20
393 查看
/** * Module dependencies. */ var assert = require('assert'); /** * Expose `thunkify()`. */ module.exports = thunkify; /** * Wrap a regular callback `fn` as a thunk. * * @param {Function} fn * @return {Function} * @api public */ function thunkify(fn){ // 校验fn参数类型是否是函数 assert('function' == typeof fn, 'function required'); return function(){ // 创建数组存储参数 var args = new Array(arguments.length); // 保存this的指向 var ctx = this; for(var i = 0; i < args.length; ++i) { args[i] = arguments[i]; } return function(done){ // 判断回调函数是否执行过,没有执行过就push进参数数组 // 用来保证回调函数只会执行一次 var called; args.push(function(){ if (called) return; called = true; done.apply(null, arguments); }); // 经参数数组传递给fn,如果出错就将err传递给回调函数 try { fn.apply(ctx, args); } catch (err) { done(err); } } } };
var thunkify = require('thunkify'); var fs = require('fs'); var read = thunkify(fs.readFile); //var read = thunkify(fs.readFile)('package.json', 'utf8'); read('package.json', 'utf8')(function(err, str){ });
相关文章推荐
- hover一个组件,另一个组件css效果
- poj 1336 The K-League (网络流)
- 选项卡(JTabbedPane)的定义
- linux grep命令
- Oracle自动备份脚本(网上找到的资料)
- Zhu and 772002---hdu5833(高斯消元解求异或方程组)
- 移动端IM系统的协议选型:UDP还是TCP?
- DELPHI存取JPEG、BMP图像到数据库完整解决方案
- 8月11日 集训测试
- Android进程间通讯之AIDL
- handler.post方法的终极最直观的理解与解释
- 推荐一些css reset
- 通过绘制上下文的方式绘制图片圆角
- 使用Python脚本语言实现自动多渠道打包心得
- 数据结构实验之查找六:顺序查找
- Android中assets目录和raw目录的区别及其中properties资源文件的读取
- 完整的REM布局的工作流程与规范
- 1036 - A Refining Company
- leetcode Construct Binary Tree from Inorder and Postorder Traversal
- POJ 1274 二分图最大匹配简单单向