以下为代码实现,该代码实现了每隔1秒打印一次当前时间,总共打印5次的功能
for(let i = 1; i <= 5; i++){
console.log(new Date().toString())
await new Promise(resolve=>setTimeout(resolve,1000))
}
实现休眠的核心代码为:
await new Promise(resolve=>setTimeout(resolve,1000))
这里使用了 Promise 异步操作功能,在 Promise 中调用了 setTimeout 方法,并在指定时间后执行回调函数完成 Promise。在外层通过 await 关键字等待 Promise 的完成。这样就实现了一个 sleep 函数了。
我们可以将其封装一下,就能实现调用了。
let sleep = (sleepMs)=>new Promise(resolve=>setTimeout(resolve,sleepMs))
// 调用 sleep 函数,休眠 3 s
console.log("start sleep 3s, current time: ",new Date())
await sleep(3000);
console.log("finish sleep 3s, current time: ",new Date())
Chrome 浏览器控制台中测试效果:
参考资料
- 从一个休眠函数了解promise、async、await
- 一种Promise延迟休眠方式