js中过一段时间后终止while循环,防止死循环的方法

今天发现了一个比较有趣的事,相信很多人遇到过写while循环时,在测试时很容易陷入死循环,导致要关闭页面再重启才能继续测试,那如果频繁调试,就每死循环一次就重启一次,很烦!
所以想写一个到一定时间就终止循环的函数,刚开始用setTimeout的方式来写,想法是到指定时间,到时间后就break终止循环;但是后来发现setTimeout是异步方法,导致函数还是陷入了死循环。
然后想到了用另一种方法解决,既然无法用异步方法终止,那就利用获取系统时间的方式来终止,大概思路是这样的:函数刚开始时保存当前时间,之后每循环一次就获取一次时间,直到循环已经过去一段时间了后返回一个设置时间已到的标记位,让while一直判断标记,达成条件就终止循环。
代码如下:

    var date1 = new Date();
    var currMS = date1.getMilliseconds(); //当前系统的毫秒值
    let miao = date1.getSeconds(); //当前秒
    var flag = true; //设置一个标记
    while (flag) {
        console.log("循环中...")
        flag = overLoop(100)
        if (!flag) {
            console.log("循环终止")
        }
    }

    //结束循环函数 该函数传入的时间参数最大只能1000 单位为毫秒 当返回false表示定时的时间已经到了
    function overLoop(ms) {
        var date = new Date();
        // console.log("开始计时毫秒值:" + currMS + ";当前系统毫秒值:" + date.getMilliseconds())

        //currms+ms<1000的时
        if (date.getSeconds() == miao && date.getMilliseconds() >= currMS + ms) {
            return false;
        }
        //currms+ms>1000的时
        if (date.getSeconds() != miao && date.getMilliseconds() > currMS + ms - 1000) {
            return false;
        }
        return true;
    }

该方法有个缺点就是会消耗一些cpu资源,不过用于测试问题不大。
我觉得应该还有更好的方法,但不能使用异步的话只能想到这个看过来有些蠢的方法。

你可能感兴趣的:(js,javascript)