• ES6——Thunkify用法


    1.

    生产环境的转换器,建议使用 Thunkify 模块。
     
    // "use strict"
    function thunkifyy(fn) {
        return function() {
            console.log(arguments);  //Arguments(2) [8, 9, callee: ƒ, Symbol(Symbol.iterator): ƒ]
            console.log(arguments.length);  // 2
    //         console.log(arguments[3]);  //        console.log(arguments[3]) ==> undefine
            var args = new Array(arguments.length);
            var ctx = this;
            for (var i = 0; i < args.length; ++i) {
                args[i] = arguments[i];
            }
            return function(done) {
                console.log(done);  // f log() { [native code] }
                var called;
                console.log(args);  //[8, 9]
                args.push(function() {
                    if (called) 
                            return;
                    called = true;
                    done.apply(null, arguments);  //定义了一个函数 作为参数,添加到args数组,在fn.apply(ctx, args);被调用
                });
                console.log(args);  //[8, 9, f]
    
                try {
                    console.log(fn)
                    fn.apply(ctx, args);  //17
                } catch(err) {
                    done(err);
                }
            }
        }
    };
    
    function f(a, b, callback){
            var sum = a + b;
                     callback(sum);  //虽然这里多次调用,也只会输出一次。8+9=17
                     callback(sum);
    }
    
    var ftt = thunkifyy(f);
    var print = console.log.bind(console);
    // ftt(1, 2,3,4,5,6,7,8,9,0)(print);
    ftt(8,9)(print);  //17
  • 相关阅读:
    try
    mysql 遇到的问题
    java POI(二)
    Spring/SpringBoot整合QuartZ
    Spring整合QuartZ
    Idea使用指南--实用版
    QuartZ
    Spring Task
    Spring01-模块划分
    国际化、文件上传下载
  • 原文地址:https://www.cnblogs.com/sunupo/p/15481677.html
Copyright © 2020-2023  润新知