js关于for循环实现线程休眠效果的问题

因为对接集成硬件需要遇到需要在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占用率也不高,对本次需求来说是较为好的解决方案。

原文地址:https://www.cnblogs.com/yanyunpiaomaio/p/13949758.html