资讯专栏INFORMATION COLUMN

如何实现【红绿灯】的问题

phoenixsky / 1959人阅读

摘要:背景最近遇到个面试题点亮绿灯,然后点亮黄灯,然后点亮红灯,然后重复循环。估计是考察相关内容。那如何更好的实现呢实现启动改进函数的貌似写复杂了,函数本身返回的就是个对象,那给方法传递的箭头函数冗余了。

背景

最近遇到个面试题:点亮绿灯3s,然后点亮黄灯1s,然后点亮红灯2s,然后重复循环。估计是考察ES6 Promise相关内容。那如何更好的实现呢?

Promise实现
function red () {
    console.log("red")
}

function green () {
    console.log("green")
}

function yellow() {
    console.log("yellow")
}

function genPromise(func, timeout) {
    return () => {
        func();
        return new Promise((resolve) => setTimeout(resolve, timeout))
    }
}

var redPromise = genPromise(red, 2000), 
    greenPromise = genPromise(green, 3000),
    yellowPromise = genPromise(yellow, 1000);

function step() {
    greenPromise().then(() => yellowPromise()).then(() => redPromise()).then(() => step())
}

// 启动
step();
改进

step函数的貌似写复杂了,yellowPromise函数本身返回的就是个Promise对象,那给then方法传递的箭头函数冗余了。修改step函数:

function step() {
    greenPromise().then(yellowPromise).then(redPromise).then(step)
}
//启动
step();
再改进

使用async/wait改进下step函数:

async function step() {
    await greenPromise();
    await yellowPromise();
    await redPromise();
    step();
}
// 启动
step();
不止这些...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98966.html

相关文章

  • 《从0到1学习Flink》—— 介绍Flink中Stream Windows

    摘要:在每个事件上,触发器都可以决定触发即清除删除窗口并丢弃其内容,或者启动并清除窗口。请注意,指定的触发器不会添加其他触发条件,但会替换当前触发器。结论对于现代流处理器来说,支持连续数据流上的各种类型的窗口是必不可少的。 showImg(https://segmentfault.com/img/remote/1460000017892799?w=1280&h=720); 前言 目前有许多数...

    jifei 评论0 收藏0
  • Java多线程奇幻之旅——Synchronized方式和CAS方式实现线程安全性能思考

    摘要:前言在上一篇文章中多线程奇幻之旅算法实现线程安全,我们介绍了和方式实现线程安全类的方法,两种方式一个是锁定阻塞方式,一个是非阻塞方式。 前言 在上一篇文章中《Java多线程奇幻之旅——CAS算法实现线程安全》,我们介绍了Synchronized和CAS方式实现线程安全类的方法,两种方式一个是锁定阻塞方式,一个是非阻塞方式。本文专注于两种实现方式效率问题。本文是上篇文章的延续,会借用到上...

    Chaz 评论0 收藏0
  • 前端设计模式用起来(1)状态模式

    摘要:有限状态机可以归纳出四个要素现态即当前的状态。但状态模式还有一点需要注意到,当采用子类继承实现多种具体状态的时候,注意控制状态的数量,以免出现子类数量膨胀的现象在使用或等更完整面向对象语言时。 业务代码开发久了,偶尔看看设计模式,总会让自己有一种清新脱俗的感觉。总想把这种感觉记下来,但一想到要先起个恰如其分的标题和开头,就让我有一种百爪挠心的纠结,所以迟迟没有开始。今天起更新我学习设计...

    Salamander 评论0 收藏0
  • 绿灯效果

    摘要:本实现来自重学前端第节执行一里的代码为什么比先执行中的最后的问题,使用实现一个红绿灯效果。打开电源红绿灯开始工作启动红绿灯延时的包装同步函数包装业务目标绿色黄色红色启动队列循环队列执行绿灯三秒黄灯一秒红灯俩秒 本实现来自 winter《重学前端》第16节 JavaScript执行(一): Promise里的代码为什么比setTimeout先执行?中的最后的问题,使用实现一个红绿灯效果。...

    olle 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<