// 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源码解析说明
最新推荐文章于 2022-07-17 09:47:01 发布
这篇博客深入解析了`thunkify`库的工作原理,通过示例展示了如何将同步风格的函数转换为适用于异步操作的形式。文章中详细解释了`thunkify`函数的内部逻辑,包括如何捕获函数参数、处理回调函数以及如何处理可能出现的错误。通过阅读,读者能够了解如何使用`thunkify`来改进异步代码的结构,以便更好地与Generator函数配合实现流程控制。
摘要由CSDN通过智能技术生成