最近,做的项目中有一个需求是在一个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);
}
}