博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一道关于Promise应用的面试题
阅读量:4071 次
发布时间:2019-05-25

本文共 3183 字,大约阅读时间需要 10 分钟。

转载:http://web.jobbole.com/86150/

题目:红灯三秒亮一次,绿灯一秒亮一次,黄灯2秒亮一次;如何让三个灯不断交替重复亮灯?(用Promse实现)三个亮灯函数已经存在:

这道题首先考察Promise的应用,Promise的详细说明请看我的这篇文章:。首先我们需要一个函数来实现时间控制:

如果把问题简化一下,如果只需要一个周期,那么利用Promise应该这样写:

现在一个周期已经有了,剩下的问题是如何让他无限循环。说道循环很容易想到for whiledo-while这三个,比如:

如果你是这样想的,那么恭喜你成功踩了坑!这道题的第二个考查点就是setTimeout相关的异步队列会挂起知道主进程空闲。如果使用while无限循环,主进程永远不会空闲,setTimeout的函数永远不会执行!

正确的解决方法就是这道题的第三个考查点——递归!!!解决方案如下:

整体代码如下:

同时可以看到虽然Promise可以用来解决回调地狱问题,但是仍然不可避免的会有回调出现,更好的解决方案是利用Generator来减少回调:

你可能感兴趣的文章
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
String类的intern方法随笔
查看>>
【泛型】一个简易的对象间转换的工具类(DO转VO)
查看>>
【并发编程】concurrent包的Condition使用详解
查看>>
【并发编程】ReentrantLock使用介绍
查看>>
【GC算法】jvm垃圾收集算法详解
查看>>
【设计模式】建造者模式详解
查看>>
【设计模式】代理模式
查看>>
【设计模式】动态代理模式
查看>>
【并发编程】当我们谈论线程安全时我们在谈论什么
查看>>
【漫谈】跨库事务控制方案
查看>>
【设计模式】策略模式
查看>>
【Spring源码解读】BeanFactory和FactoryBean区别及类装载源码解读
查看>>
【设计模式】责任链模式
查看>>
【Spring源码】AOP部分源码解读
查看>>
【设计模式】状态模式
查看>>
发奖控制数量的几种方式(锁,数据库锁,分布式锁,无锁)
查看>>
你的单例真的写对了吗?能经受住反射的考验吗
查看>>
mac nginx php
查看>>