• 关于Promise的一个案例


    题目:红灯三秒亮一次,绿灯一秒亮一次,黄灯2秒亮一次;如何让三个灯不断交替重复亮灯?(用Promise实现)

    解答思路一:

    function red(){
        console.log('red');
    }
    function green(){
        console.log('green');
    }
    function yellow(){
        console.log('yellow');
    }
    
    var tic = function(timmer, cb){
        return new Promise(function(resolve, reject) {
            setTimeout(function() {
                cb();
                resolve();
            }, timmer);
        });
    };
    
    var d = new Promise(function(resolve, reject){resolve();});
    var step = function(def) {
        def.then(function(){
            return tic(3000, red);
        }).then(function(){
            return tic(2000, green);
        }).then(function(){
            return tic(1000, yellow);
        }).then(function(){
            step(def);
        });
    }
    
    step(d);

    解答思路二:

    // 方法二:虽然Promise可以用来解决回调地狱问题,但是仍然不可避免的会有回调出现
    var tic = function(timmer, str){
        return new Promise(function(resolve, reject) {
            setTimeout(function() {
                console.log(str);
                resolve(1);
            }, timmer);
        });
    };
    
    
    function *gen(){
        yield tic(3000, 'red');
        yield tic(1000, 'green');
        yield tic(2000, 'yellow');
    }
    
    var iterator = gen();
    var step = function(gen, iterator){
        var s = iterator.next();
        if (s.done) {
            step(gen, gen());
        } else {
            s.value.then(function() {
                step(gen, iterator);
            });
        }
    }
    
    step(gen, iterator);

    摘录来源:http://www.cnblogs.com/dojo-lzz/p/5495671.html

  • 相关阅读:
    (Oracle)取当前日期的最近工作日
    (Oracle)误删oracle表结构恢复
    (Oracle)DDL及其数据泵导入导出(impdp/expdp)
    kettle 连接oracle12c问题解决办法:
    js日历算法
    js设置cookies
    js获取下拉框的value值
    js记住密码
    checkBox的全选与全不选
    select下拉框选中其中一个值
  • 原文地址:https://www.cnblogs.com/xuhang/p/5496433.html
Copyright © 2020-2023  润新知