因为对接集成硬件需要遇到需要在for循环中实现休眠效果,以前遇到过类似问题,当时想到用setTimeout发现js不支持会得到有意思的结果参考如下

1 function test(){
2         for(let i = 0; i<10; i++){
3             setTimeout(function(){
4                 console.log(i);
5             },1000)
6         }
7         }

执行后会是一秒后打印10个10,当时主要需要解决异步问题,后来用promise解决,但本次对接又无法修改硬件控件代码,在网上找到的方法如下

 1 //参数n为休眠时间,单位为毫秒:
 2         function sleep(n) {
 3             var start = new Date().getTime();
 4             //  console.log('休眠前:' + start);
 5             while (true) {
 6                 if (new Date().getTime() - start > n) {
 7                     break;
 8                 }
 9             }
10             // console.log('休眠后:' + new Date().getTime());
11         }

 

在for循环中调用sleep可以实现休眠效果,但是会一直占用资源,后来想到用递归是不是也能实现类似的效果呢,代码如下

1 // 调用时触发  初始值传参为0
2 function test(i) {
3             if (i < 10) {
4                 console.log(i);
5                 setTimeout(function() {
6                     test(i + 1);
7                 }, 1000)
8             }
9         }

使用递归可以实现同样的效果,测试对cpu占用率也不高,对本次需求来说是较为好的解决方案。

posted on 2020-11-09 17:45  烟云缥缈  阅读(2397)  评论(0编辑  收藏  举报

You win!