promise是什么?

Promise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。

红绿灯的效果就是使用promise的原型的then方法,再加上闭包

红绿灯的效果是: 红灯3秒,黄灯1秒,绿灯2秒

1、首先是html代码

<div id="bigbox"><div class="box" id="redbox"></div><div class="box" id="yellowbox"></div><div class="box" id="greenbox"></div>
</div>

2、 css代码

#bigbox{width: 200px;height: auto;background: black;border-radius: 20px;padding: 10px;
}
.box{width: 160px;height: 160px;margin: 0 auto;margin-top: 10px;border-radius:50%;border: 5px solid gray;background: black;
}

3、 js代码

     <script>var red=document.getElementById('redbox');var yellow=document.getElementById('yellowbox');var green=document.getElementById('greenbox');function changeColor(t){return new Promise((resolve,reject)=>{setTimeout(resolve,t)})}//利用闭包原理循环红绿灯;(function change(){red.style.backgroundColor="red";changeColor(3000).then(()=>{red.style.backgroundColor="black";yellow.style.backgroundColor="yellow";return changeColor(1000)}).then(()=>{yellow.style.backgroundColor="black";green.style.backgroundColor="green";return changeColor(2000)}).then(()=>{green.style.backgroundColor="black";change()})})();</script>

创建一个changeColor方法,返回的是一个promise对象,所以在下面调用changeColor方法是可以用promise的原型方法 then

4、 实现原理

promise对象转化为resolved时,then方法才调用里面的回调函数。

即 changeColor中的定时器在经过规定秒数后,才传递出resolve的状态是否是resolved,then在接收到resolved后才开始执行变色的代码,这样就实现了一个灯亮的时间,有因为then里面return changeColor(1000),所以又是一个新的promise对象了,可以接着使用then方法。

在最后的then中再调用change()方法,就实现了循环。

利用promise写红绿灯相关推荐

  1. [探索] 利用promise做一个请求锁

    在最近开发小程序的过程中,遇到一个需求,就是请求的时候header需要带上accessToken, accessToken是通过登陆接口返回的参数,可能会出现过期的情况,则需要重新登陆,所以每次加载小 ...

  2. 利用Flutter写一个跨平台的果核APP(4)——数据存储

    前言 目前我们已经实现了几个界面,今天这篇文章开始着手进行登录页的制作,主要流程就是获取输入框中的内容,发送给后台进行验证,如果成功将返回信息保存在本地并跳转至首页,如果失败就提示用户重新输入. 在这 ...

  3. SQL语句利用日志写shell

    outfile被禁止,或者写入文件被拦截: 在数据库中操作如下:(必须是root权限) show variables like '%general%'; #查看配置 set global genera ...

  4. 你会利用css写下拉列表框吗?

    看到网上各个网站有各色各样的下拉列表框,你是否有想过自己去做一个出来呢?出于好奇与自强心,我研究了一个下午,发现网上很多的下拉列表框都是利用javascript或者是jquery(其实jquery和j ...

  5. 利用apache-commons-fileupload写jsp上传文件

    利用apache-commons-fileupload写jsp上传文件 需要下载fileupload和beanutils两个包,代码如下. <%@ page language="jav ...

  6. 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装

    在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...

  7. axios 登录后设置header_axios如何利用promise无痛刷新token

    需求 最近遇到个需求:前端登录后,后端返回token和token有效时间,当token过期时要求用旧token去获取新的token,前端需要做到无痛刷新token,即请求刷新token时要做到用户无感 ...

  8. 利用redis写webshell

    redis和mongodb我之所见 最近自己在做一些个人的小创作.小项目,其中用到了mongodb和redis,最初可能对这二者没有深入的认识. 都是所谓的"非关系型数据库",有什 ...

  9. 利用jquery写的从后台获取json数据以表格显示,并带翻页功能.里面包含模式窗口等功能...

    利用jquery写的从后台获取json数据,以表格显示,并带翻页功能 里面包含模式窗口等功能 大家看例子就懂了 下面是效果图: http://www.jm47.com/project/3001.asp ...

最新文章

  1. 服务器状态监控之一背景介绍及解决方案建议
  2. 【工具类】JAVA POI 代码导出表格的两种办法(代码全注释,小白也不怕)
  3. tf.reverse_sequence
  4. SQL语句中timestamp进行排序BUG
  5. BZOJ 1045 [HAOI2008]糖果传递 ★(环形等分:中位数)
  6. [你必须知道的.NET]第十七回:貌合神离:覆写和重载
  7. 『高级篇』docker之安全认证kubernetes命令熟悉(40)
  8. 关于类ImageFolder
  9. 稳定币GUSD的优劣势分析
  10. 雷军恭喜苏炳添全运会夺冠:你是小米精神的最好代言
  11. 【kafka】Attempted to write a non-default produerId at version 1
  12. SVN clean失败解决方法
  13. 2017-03-10Git撤销修改
  14. java.io.serializable_java.io.NotSerializableException即使我实现“Serializable”
  15. java 如何取01 zz_java中synchronized用法(zz)
  16. EBS R12.2 创建应用层的启动和关闭脚本
  17. python输出的格式_将Python输出格式化为行
  18. DirectX11 With Windows SDK--03 索引缓冲区、常量缓冲区
  19. 替换文本框文字html,js替换选中的文字,兼容所有浏览器
  20. 员工绩效考核指标设计主要原则(zt)

热门文章

  1. double 转float 损失精度
  2. SQL——最大连续登录天数、当前连续登录天数、最大连续未登录天数问题、连续登陆N天用户、连续座位号
  3. C++中的仿函数functor
  4. 在中国,什么样的人能当项目经理?
  5. 激光雷达的“软”实力竞赛
  6. 详解win10任务视图快捷键是什么
  7. 国家药品集采平台|如何免费查询历史各批次集采信息?
  8. 马云西点军校华为_马云西点军校演讲:领导力是因为相信,所以看见!
  9. 年底了还没入门?分享下我的自动驾驶与CV算法工程师成长路线图(双十二巨献)...
  10. Stealing Harry Potter‘s Precious HDU - 4771