前端在 for循环中执行 延时定时任务(不是settimeout)

150 阅读1分钟

最近,做的项目中有一个需求是在一个for循环中,执行一个定时任务,就是让每次循环都等待1秒。这我首先就想到了定时器啊,于是用上了settimeout ,于是就出问题了,因为settimeout 是一个异步操作,需要在主线程任务结束在能执行,这就尴尬了,于是我又去找怎么把settimeout搞成同步能在for循环中使用。结果废了半天功夫也没成功。

后来,终于在一个大佬的文章中找到了心仪的解决方案,特此记录下来,以供日后使用,也方便大家使用

这就是核心

        function delay(delaytime) {
            let overTime = new Date().getTime()+parseInt(delaytime);
            while (new Date().getTime() < overTime );
        }

在for循环中使用

        ceshi()
        function ceshi(){
            for (let i = 1; i <= 5; i++) {
                console.log(`我在延时循环第${i}次`);
                delay(1000);
            }
        }