• 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占用率也不高,对本次需求来说是较为好的解决方案。

  • 相关阅读:
    VS Code 的常用快捷键
    oj教程--坑
    oj教程--学习顺序
    oj教程--链表
    oj教程--队列
    oj教程--栈
    【MySQL】汇总数据
    【MySQL】使用WHERE子句
    【MySQL】SELECT语句
    【MySQL】使用MySQL(连接、选择数据库、显示数据库和表信息)
  • 原文地址:https://www.cnblogs.com/yanyunpiaomaio/p/13949758.html
Copyright © 2020-2023  润新知