一道简单的编程题_ 关于定时器.
2017-07-27 09:33
260 查看
一道编程题
在群里有人发了一道编程题, 起初以为很简单, 尝试写了写, 没做出来.也真是尴尬. 记录下.
最后也没能实现关于异步的处理.
题目概要
编写一个函数var x = function(count, time, func, param){};
该函数有四个参数, 实现的功能为每隔
time秒执行一次
func函数, 执行
count次
param为传到
func函数里的参数,
param是数组类型,
func函数的形式
解题思路
起初以为很简单, 只是简单的考察一些基本的知识点, 事实上, 我大意了.首先是
time, 一定是一个定时器, 想到了
setTimeOut,
然后是
count, 多少个, 也就是一个有多少个定时器, 然后, 经过一定时间就执行一次.
后面就简单了, 回调函数, 往里面传入一个参数.
失败的地方遇到了, 首先是, 如果是定时器的话, 用for循环, 那么时间到了, 刷, 一下子,全都执行了.
还有一个点就是关于如何控制次数的, 这个比较容易解决.
当时错误的主要地方就是: 关于如何控制定时器的时间, 如果传入不同的时间, 那就是一次分发多个不同的定时器, 如果传入的是同一个时间, 没有找到一个定时器执行完成了, 另一个定时器再执行的方法.
其实刚刚自己尝试了很多, 函数立即执行, 闭包, 都没有能实现需求.
答案(一): 一次分发多个定时器
这种思路是, 自己在不能控制定时器一个执行完成后, 再执行另外一个时候找到的.当然, 自己刚刚开始, 在传入的时间那里, 有点乱了.
var x = function (count, time, func, param) { for (let i = 1; i <= count; i++) { let doTime = parseInt(time) * i * 1000 setTimeout(function () { func(param) }, doTime); } } x(3, 3, function (info) { console.log(info) }, [1, 2, 3])
答案(二): 使用setInterval
使用setInterval, 在特定时间执行一次函数, 当指定次数完成后, 就停止定时器var x = function (count, time, func, param) { function y() { console.log('执行一次: ' + count) count-- func(param) if (count !== 0) { setTimeout(y, time * 1000) } } setTimeout(y, time * 1000) } x(3, 3, function (info) { console.log(info) }, [1, 2, 3])
答案(三): 使用递归思想
使用递归的思想,当一个执行器完成后, 如果次数还没有满, 就再相同的设置一个定制器, 整个定时器, 执行完成后再判断看看, 有没有次数达到上限, 没有完成的话, 就继续, 完成了, 就结束了, 不再设置定时器即可
这个方法的确定是, 当执行完成了, 但还是会等一个时间间隔, 才会清除定时器, 并停止.
var x = function (count, time, func, param) { var timer = setInterval(function () { count-- if (count >= 0) { func(param) } else { clearInterval(timer) } }, parseInt(time * 1000)) } x(3, 3, function (info) { console.log(info) }, [1, 2, 3])
最后
其实想看到更多的实现方法, 感觉很有意思.始终没有找到关于异步的处理方法.
有时候就是想得太多了, 真是没有必要, 有些东西有简单的实现, 没必要绕很远的路. 多想几种方法, 能变得很有趣.
相关文章推荐
- 一道关于股票买卖的算法编程题
- 关于NVDIA(英伟达)一道笔试编程题——蛇形阵列——的再思考
- 一道关于jvm加载的简单题目
- 一道简单的编程题考核你的编程功底
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 简单理解一道关于#ifndef 和extern "C"的题
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 一道简单的编程题,不过您做对了吗?
- 一道简单的编程题,不过您做对了吗?
- 一道简单的关于override的测试题
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 一道简单的C++笔试题,关于抽象shape类求图形周长的问题~
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 一道简单的编程题
- 利用休息时间编写的关于新唐单片机较为简单的ADC+定时器+IO端口程序
- 一道简单的关于图的题
- 关于short的一道简单题目
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?