用promise和async/await分别实现红绿灯

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>练习</title>
    
</head>
<style>
    .light{
        width:200px;
        height: 200px;
        border-radius:50%;
        background:red;
    }
    .light2{
        width:200px;
        height: 200px;
        border-radius:50%;
        background:red; 
    }
</style>
<body>
    <div class="light"></div>
    <div class="light2"></div>
<script>
    //promise实现  红绿灯
    var light=document.getElementsByClassName("light")[0];
    var r=function(){
        return new Promise(function(resolve,reject){
            light.style.background="red";
            setTimeout(resolve,3000);
        })
    };
    var y=function(){
        return new Promise(function(resolve,reject){
            light.style.background="yellow"; 
            setTimeout(resolve,2000);
        })
    }
    var g=function(){
        return new Promise(function(resolve,reject){
            light.style.background="green"; 
            setTimeout(resolve,4000);
        })
    }
    var xun=function(){
            r().then(function(){
                return y();
            }).then(function(){
                return g();
            }).then(function(){
                return xun();
            });
    }
    xun();

    //async/await实现红绿灯
    const lignt2=document.getElementsByClassName("light2")[0];
    function changeLightColor(color,duration){
        return new Promise(function(resolve,reject){
            lignt2.style.background=color;
            setTimeout(resolve,duration);
        })
    }

    async function xun2 (){
        await changeLightColor("red",3000);
        await changeLightColor("yellow",2000);
        await changeLightColor("green",4000);
        xun2();
    }
    xun2();//执行
</script>
</body>
</html>
复制代码

 

posted @   古墩古墩  Views(375)  Comments(0Edit  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示