前言
我们知道异步编程的难点之一阻塞代码,JavaScript没有原生的sleep()这样的线程沉睡功能,我们可以自己手写一个sleep函数,来达到延迟执行函数的方法,在《深入学习Node.js》一书中,提到遇见这种需求,调用setTimeout()效果最好,兼容性更佳。
方法一 直接使用setTimeout()
实现延迟自定时间后执行函数
function sleep(time, fn) {
setTimeout(() => {
fn()
}, time)
}
方法二 Promise+setTimeout()
延迟一定时间后使Promise的PENDING状态转为FULFILLED,在用then()方法调用函数
const fn = function() {}
function sleep(time) {
return new Promise((resolve) => {
setTimeout(resolve, time)
})
}
sleep(3000).then(fn())
方法三 async/await
和上面的思路一样,也是使用异步思想,不过这个函数是在内部运行的
async function sleep(time, fn) {
await new Promise((resolve) => {
setTimeout(resolve, time)
})
fn()
}
sleep(3000, fn)
结语
在网上还看到了第四种方法用Generator做也能解决,有兴趣的小伙伴可以自己研究一下