JS 中使用Promise 实现红绿灯实例代码(demo)

前端之家收集整理的这篇文章主要介绍了JS 中使用Promise 实现红绿灯实例代码(demo)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

要求

  • 使用promise 实现红绿灯颜色的跳转
  • 绿灯执行三秒后
  • 黄灯执行四秒后
  • 红灯执行五秒

html 实现如下:

  • 定义一个空类,之后再js中操作对应的类名即可实现相关的效果

    CSS实现如下:

    li { width: 40px; height: 40px; border-radius:50%; opacity: 0.2; display: inline-block; } /*执行时改变透明度*/ ul.red >#red,ul.green >#green,ul.yellow >#yellow{ opacity: 1.0; } /*红绿灯的三个颜色*/ #red {background: red;} #yellow {background: yellow;} #green {background: green;}

    javascript原理:

    promise函数为一个异步操作函数,在函数运行结束时可以使用then()方法。我们再在promise函数内部设置延迟执行即可实现。

    js 代码如下:

    ps:下面看一个Promise用法例子

    注意:要想then方法能链式的执行下去,必须返回Promise对象!!!

    function async(value) {
    return new Promise(function(resolve,reject) {
    var ms = Math.round(Math.random() * 1000);
    setTimeout(function() {
    console.log('waiting ' + ms + 'ms');
    // 等待ms毫秒
    resolve(value + ms);
    },ms);
    });
    }
    // 每次执行随机等待n毫秒,结果统计总毫秒数
    async(0)
    .then(async)
    .then(async)
    .then(async)
    .then(async)
    .then(function(value) {
    console.log('------total wait:' + value + 'ms');
    });
    ////////////////////////////////////////////////////////////
    function async1(value) {
    return new Promise(function(resolve,reject) {
    resolve(value + 1);
    });
    }
    function async2(value) {
    // return new Promise(function(resolve,reject) {
    // resolve(value + 2);
    // });
    // 等价与上面写法
    return Promise.resolve(value + 2);
    }
    function async3(value) {
    return new Promise(function(resolve,reject) {
    resolve(value + 3);
    });
    }
    async1(100).then(async2).then(async3).then(function(value) {
    console.log('------' + value);
    });
    /////////////////////////////////////////////////////////////////
    function say() {
    var value = 'what';
    return Promise.resolve(value);
    }
    say().then(function(value) {
    value = value + ' are';
    return Promise.resolve(value);
    }).then(function(value) {
    value = value + ' you';
    return Promise.resolve(value);
    }).then(function(value) {
    value = value + ' doing';
    return Promise.resolve(value);
    //return Promise.reject('error,exit'); // 中途退出
    }).then(function(value) {
    value = value + ' now!';
    return Promise.resolve(value);
    }).then(function(value) {
    console.log('------' + value);
    }).catch(function(error) {
    console.log('------' + error);
    });

    Ball move