zoukankan      html  css  js  c++  java
  • 简单模拟CO模块

    promise方式:

    // 对co模块的简单模拟
    
    function run(gen){
        var g = gen();
        function next(data){
            var result = g.next(data);
            if (result.done) return result.value;
            result.value.then(function(data){
                next(data);
            });
        }
        next();
    }
    
    function a(aa){
        return new Promise(function (resolve, reject){
            setTimeout(function (){
                console.log(aa);
                resolve('dataA');
            }, 1000);
        });
    }
    
    function b(bb){
        return new Promise(function (resolve, reject){
            setTimeout(function (){
                console.log(bb);
                resolve('dataB');
            }, 1000);
        });
    }
    
    function *gen(){
        console.log(yield a('aa'));
        console.log(yield b('bb'));
    }
    
    run(gen);
    
    /*
    等一秒
    aa
    dataA
    等一秒
    bb
    dataB
    */

    thunk方式:

    // 对co模块的简单模拟
    
    function run(fn) {
        var gen = fn();
        function next(err, data) {
            var result = gen.next(data);
            if (result.done) return;
            result.value(next);
        }
        next();
    }
    
    var Thunk = function(fn){
        return function(...args){
            return function(callback){
                return fn.call(this, ...args, callback);
            };
        };
    };
    
    function a(aa, cb){
        setTimeout(function (){
            console.log(aa);
            cb(null, 'dataA');
        }, 1000);
    }
    
    function b(bb, cb){
        setTimeout(function (){
            console.log(bb);
            cb(null, 'dataB');
        }, 1000);
    }
    
    var aThunk = Thunk(a);
    var bThunk = Thunk(b);
    
    function *gen(){
        console.log(yield aThunk('aa'));
        console.log(yield bThunk('bb'));
    }
    
    run(gen);
    
    /*
    等一秒
    aa
    dataA
    等一秒
    bb
    dataB
    */
  • 相关阅读:
    三、springcloud之服务调用Feign
    二、springcloud之熔断器hystrix
    AngularJS中ng-class使用方法
    js中字符串的常用方法
    js中数组的操作
    Linux生成私钥和公钥免密连接
    Jenkins部署码云SpringBoot项目到远程服务器
    Jenkins部署码云SpringBoot项目
    ELK日志分析方案
    Vue项目History模式404问题解决
  • 原文地址:https://www.cnblogs.com/jyuf/p/7857405.html
Copyright © 2011-2022 走看看