Thunk函数
Thunk函数就是用来解决JavaScript中的传名调用的一种实现方式
Thunk函数根据个人的理解应该就是柯里化,简单来说,就是一个单参数函数,只接受回调函数作为参数,这个单参数版本便是Thunk函数
fs.readFile(fileName, callback)
var Thunk = function(fileName){
return function(callback){
return fs.readFile(fileName, callback)
}
}
var readFileThunk = Thunk(fileName)
readFileThunk(callback)
Generator函数流程管理
不过在ES6前没有太大用处,但是在Generator函数出来后,Thunk函数就可以排上用场,用于Generator函数的自动流程管理
Generator函数可以自动执行的,不过不适合异步操作
function* gen() {
// ...
}
var g = gen();
var res = g.next();
while(!res.done){
console.log(res.value);
res = g.next();
}
所以可以通过Thunk函数的自动流程管理,用于自动控制Generator函数的流程,接收和交换程序的执行权(回调函数和Promise对象都可以做到)
function run(fn) {
var gen = fn();
function next(err, data) {
var result = gen.next(data);/*将指针移动到Generator函数的下一步*/
if (result.done) return;/*判断是否结束*/
result.value(next);/*递归,把next放进.value中*/
}
next();
}
var g = function* (){
var f1 = yield readFile('fileA');
var f2 = yield readFile('fileB');
// ...
var fn = yield readFile('fileN');
};
run(g);