有的人说写一个sleep好简单,直接一行代码稿定:
const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))
但是往往我们在实际用的时候,需要额外手动清理释放timer,否则会内存泄漏出,导致浏览器直接爆了,那是因为我们没有清除它,那么怎么写改善这个方法,方便我们在多处使用它,又能方便的清除定时器呢?其实很简单,我们把定时器挂载到自身就可以了。以下就是实现代码:
// 延迟delay实现
export const delay = (time) => {
if(delay.timer) {
clearTimeout(delay.timer)
delay.timer = null
}
return new Promise((resolve) => {
delay.timer = setTimeout(() => resolve(delay), time)
return delay.timer
})
}
使用的时候也很简单,如下:
import { delay } from "@/utils/utils"
delay.timer && clearTimeout(delay.timer)
await delay(1000)