// Example
// var thunkify = require('thunkify');
var fs = require('fs');
function thunkify(fn) {
return function () { // A
var args = new Array(arguments.length);
var ctx = this;
for (var i = 0; i < args.length; ++i) {
args[i] = arguments[i];
}
// args为fs.readfile所要的除callback参数
return function (done) { // B
var called;
args.push(function () {
// fs.readfile的回调先由这个函数接管,在将参数传给用户自定义的回调函数
if (called) return; // 只是防止多次调用回调函数而已.例子可以查看:http://es6.ruanyifeng.com/#docs/generator-async#Thunkify-%E6%A8%A1%E5%9D%97
called = true;
done.apply(null, arguments);
});
try {
fn.apply(ctx, args); // C
} catch (err) {
done(err); // 如果在执行fs.readfile失败了,也将报错信息发给用户的回调函数
}
}
}
};
var read = thunkify(fs.readFile); // 传入要使用的方法名,返回1个function A
// read('package.json', 'utf8') 传入除callback以外的所有参数,并返回一个function B
// (function (err, str) 传入callback函数,执行fs.readfile方法,C
read('package.json', 'utf8')(function (err, str) {
});
es6 Thunkify源码解析说明
最新推荐文章于 2024-06-07 09:38:12 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)