您的位置:首页 > 其它

读源码---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){

});



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: