js延迟执行下一条语句,非异步的办法,延迟for循环的办法

编辑整理:
老秦
热度:
2621

javascript延迟执行下一条语句,怎么延迟执行for循环的办法。非异步的办法

有时候我们需要延迟执行下一句代码。但是如果是在for循环里面,那用setTimeout不一定合适。833dfb75

用setTimeout是异步的,不能阻塞for循环833dfb75

for vat i=0;i<100;i++{78c7

    //延迟执行下一个833dfb75

    setTimeout(function () {833dfb75

         //被延迟的代码

424fbc06

    },1000);//1000是1秒

424fbc06

}78c7

此时for会连续执行完毕,setTimeout另外按照延迟时间执行。c0d62c5


注意:以下阻塞方法sleep调用以后会阻塞所有js的执行或显示。细节请自行测试。www.9lyp.com

异步的操作(比如ajax请求)似乎没阻止,但是F12里不会显示。异步如果对当前页面有操作会在sleep之后才会执行或显示结果。实测还是对异步执行语句有影响。建议用在逻辑简单一点的地方。1cd


//第一种,使用while循环,毫秒c0d62c5

function sleep(delay) {4d2ed5aa

    var start = (new Date()).getTime();aeab8b8

    while((new Date()).getTime() - start < delay) {

424fbc06

        continue;4d2ed5aa

    }1cd

}c0d62c5



1cd

//或者使用for循环4d2ed5aa

function sleep(delay) {1cd

    for(var t = Date.now(); Date.now() - t <= d;);78c7

}4d2ed5aa


例子:78c7

实测是可行的。每一秒输出一次。aeab8b8

for (let i=0;i<list.length;i++ ){78c7

            console.log('222222222');4d2ed5aa

            ComTime.sleep(1000);4d2ed5aa

        }c0d62c5


www.9lyp.com78c7