Promise 实现红绿灯
利用 Promise 实现一个元素先红色两秒在黄色一秒再绿色三秒,不断循环。目前我想出的有三种方法。
首先是 HTML 代码:
<table> <tbody> <tr> <td class="light"></td> </tr> </tbody></table>
1.第一种方法,这段代码其实只是利用了 setTimeout 的特性,只用 setTimeout 也可以实现。
let light = document.querySelector('.light');function red() { return new Promise(function(resolve, reject) { light.style.backgroundColor = 'red'; setTimeout(function() { resolve(green()) }, 2000); })}function green() { return new Promise(function(resolve, reject) { light.style.backgroundColor = 'green'; setTimeout(function() { resolve(yellow()) }, 3000); })}function yellow() { return new Promise(function(resolve, reject) { light.style.backgroundColor = 'yellow'; setTimeout(function() { resolve(red()) }, 1000); })}red();
2.第二种方法,利用 Promise 和 async 函数的特性,是代码看起来更像是同步。
let light = document.querySelector('.light'); function lightChange(duration,color) { return new Promise(function(resolve,reject) { light.style.backgroundColor = color; setTimeout(resolve,duration); })}async function index() { while(1) { await lightChange(2000,'red'); await lightChange(1000,'yellow'); await lightChange(3000,'green'); }}// async 函数提供了用同步代码编写异步的方式index();
3.第三种方法用生成器和迭代器模拟 async 函数。这种写法并没有什么意义,只是写着玩,不推荐使用。
let light = document.querySelector('.light'); function func(color, duration) { return new Promise(function(resolve, reject) { light.style.backgroundColor = color; setTimeout(function() { it.next(); }, duration) })}function* main() { while (1) { yield func('red',2000); yield func('yellow',1000); yield func('green',3000); }}var it = main();it.next();
Gwen Weustink 2016-03-02 09-53-30 .jpg
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Promise 实现红绿灯
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Promise 实现红绿灯