异步编程(2) Thunk函数

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);

参考: http://es6.ruanyifeng.com/#docs/generator-async

你可能感兴趣的:(异步编程(2) Thunk函数)