js关于for循环实现线程休眠效果的问题
因为对接集成硬件需要遇到需要在for循环中实现休眠效果,以前遇到过类似问题,当时想到⽤setTimeout发现js不⽀持会得到有意思的结果参考如下
1function test(){
2for(let i = 0; i<10; i++){
3            setTimeout(function(){
4                console.log(i);
5            },1000)
6        }
7        }
执⾏后会是⼀秒后打印10个10,当时主要需要解决异步问题,后来⽤promise解决,但本次对接⼜⽆法修改硬件控件代码,在⽹上到的⽅法如下
1//参数n为休眠时间,单位为毫秒:
2function sleep(n) {
3var start = new Date().getTime();
4//  console.log('休眠前:' + start);
5while (true) {
6if (new Date().getTime() - start > n) {
7break;
8                }
9            }
10// console.log('休眠后:' + new Date().getTime());
11        }
在for循环中调⽤sleep可以实现休眠效果,但是会⼀直占⽤资源,后来想到⽤递归是不是也能实现类似的效果呢,代码如下
1// 调⽤时触发初始值传参为0
2function test(i) {
代码运行js特效
3if (i < 10) {
4                console.log(i);
5                setTimeout(function() {
6                    test(i + 1);
7                }, 1000)
8            }
9        }
使⽤递归可以实现同样的效果,测试对cpu占⽤率也不⾼,对本次需求来说是较为好的解决⽅案。