美文网首页
异步编程(2) Thunk函数

异步编程(2) Thunk函数

作者: LElysion | 来源:发表于2017-03-11 02:49 被阅读0次

    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函数

          本文链接:https://www.haomeiwen.com/subject/xccagttx.html