怎么去写一个公共的好用的sleep?

60 阅读1分钟

有的人说写一个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)