zoukankan      html  css  js  c++  java
  • 关于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

  • 相关阅读:
    python 模拟(简易)音乐播放器
    Python中的多态如何理解?(转)
    mysql踩得坑
    python简单模拟博客园系统
    04 信号量
    02 事件
    01 管道
    32 管道 事件 信号量 进程池 线程的创建
    02 验证进程之间是空间隔离的
    01 进程的其他方法
  • 原文地址:https://www.cnblogs.com/xuhang/p/5496433.html
Copyright © 2011-2022 走看看